Если да, то каков синтаксис для такого объявления?
Могут ли глобальные константы быть объявлены в JavaScript?
Ответ 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), вы можете сделать следующее:
- Создайте файл settings.js с любыми необходимыми константами и экспортируйте их:
export const FRUIT = "kiwi"; export const VEGETABLE = "carrot";
- В файлах, которые вы хотите использовать, вы можете импортировать их следующим образом:
import * as Settings from './settings.js'
- Затем для использования констант сделайте что-то вроде этого:
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.
Итак, если константа определена внутри {}, то она локальная, в противном случае она глобальная.