Подтвердить что ты не робот

Могут ли глобальные константы быть объявлены в JavaScript?

Если да, то каков синтаксис для такого объявления?

4b9b3361

Ответ 1

Javascript действительно не имеет понятия именованной константы или неизменяемого свойства объекта. (Обратите внимание, что я не говорю о ES5 здесь.)

Вы можете объявить глобальные переменные простым объявлением var в глобальной области видимости, например, вне любой функции в script, включенной на веб-странице:

<script>
  var EXACTLY_ONE = 1;

Тогда ваш код может использовать эту константу, конечно, хотя она не является "константой", потому что значение может быть изменено (добавлено свойство, другими словами).

Ответ 2

Как "Pointy" так тщательно отмечает, ECMAscript не имеет такой функции. Однако JavaScript делает:

const a = 7;
document.writeln("a is " + a + ".");

Конечно, если вы пишете код для запуска в Интернете для работы в веб-браузерах, это может не сильно помочь вам.: -)

Ответ 3

Все глобально, если не объявлено с ключевым словом var.

Также нет констант. Вы можете просто объявить их без ключевого слова var.

Если вы хотите обеспечить глобальную область видимости, вы можете бросить ее в объект window:

window.GLOBAL_CONSTANT = "value";

Вы можете сделать это из любой области. Затем константы могут быть объявлены внутри функций или закрытий, хотя я бы не рекомендовал этого.

Ответ 4

Вы можете сделать это с помощью геттеров и сеттеров следующим образом:

Object.defineProperty(window, 'TAU', { 
    get: function(){return Math.PI*2;}
});

Если вы хотите, чтобы общая функция делала это:

function define(name, value){
    Object.defineProperty(window, name, { 
       get: function(){return value;},
       set: function(){throw(name+' is a constant and cannot be redeclared.');},
    });
}

// Example use
define('TAU', Math.PI*2);

Ответ 5

Если вы хотите убедиться, что значение не может изменить, используйте функцию.

Итак, вместо:

var Const_X=12

использовать:

function Const_X() {
return 12;
}

Ответ 6

Если вы заботитесь только о поддержке новых браузеров (или используете для поддержки старых браузеров транспортер, такой как Babel), вы можете сделать следующее:

  1. Создайте файл settings.js с любыми необходимыми константами и экспортируйте их:
export const FRUIT = "kiwi";
export const VEGETABLE = "carrot";
  1. В файлах, которые вы хотите использовать, вы можете импортировать их следующим образом:
import * as Settings from './settings.js'
  1. Затем для использования констант сделайте что-то вроде этого:
console.log("The unchangeable fruit is " + Settings.FRUIT);

Это гораздо более чистый подход, чем попытка реализовать глобальную константу, особенно если у вас есть несколько файлов JavaScript, в которых вы хотите использовать константы.

Ответ 7

Прямой ответ на этот вопрос - нет. Это действительно помогло бы, если бы ECMA/JS нашли способ легко заниматься функциональным программированием. Работоспособный хак, который я использую, чтобы обойти это, - объявить const в глобальной области видимости и использовать функцию-обёртку, см. Пример ниже:

:)

global_var = 3; //This can change say inside a function etc. but once you decide to make 
                //this global variable into a constant by calling on a function
const make_variable_constant = function(variable)
{
    const constant = variable;
    return constant;
}

const const_global = make_variable_constant(global_var);

:)

В далеком прошлом, когда объектно-ориентированное программирование было шумихой, ребята из моего класса сказали преподавателю C, что C не является объектно-ориентированным, и, по словам преподавателя, он делал объектно-ориентированное программирование на C еще до того, как были разработаны Java и C++. Точно так же вы можете заниматься функциональным программированием на Javascript, но это намного сложнее. Это как делать объектно-ориентированное программирование на C, когда это проще сделать в C++.

Ответ 8

Для записи.

// ES6+ code:
const CONSTGLOBAL1=200;  // it is a constant global

function somef() { 
   document.write(CONSTGLOBAL1); // CONSTGLOBAL1 is defined (because it global)
   const CONSTLOCAL=200; // it a local constant
   document.write(CONSTLOCAL); // CONSTLOCAL is defined
}       
somef();
document.write(CONSTLOCAL); // CONSTLOCALis NOT defined.

Итак, если константа определена внутри {}, то она локальная, в противном случае она глобальная.