Firefox и Chrome поддерживают ключевое слово const
. IE нет. Так что если вам нужны константы и вам не нужна поддержка IE, const
не плохой выбор. Имейте в виду, однако, что ни один браузер не выдает ошибку времени выполнения, когда значение присваивается const
; значения просто остаются неизменными.
В противном случае вы должны использовать функции для определения констант, которые не могут быть изменены:
function PI() { return 3.14159; }
var area = radius*radius * PI();
Конечно, вы могли бы просто написать код, который никогда не изменяет определенные переменные, и, возможно, установить схему именования таких переменных, чтобы вы знали, что их никогда не нужно будет модифицировать ...
// note to self: never assign values to variables utilizing all-uppercase name
var PI = 3.14159;
Другим вариантом «симуляции» констант может быть использование функциональности определения свойств , доступной в некоторых браузерах, для определения свойств объекта, доступных только для чтения. Разумеется, поскольку браузеры, поддерживающие определения свойств, не включают IE, это не очень помогает ... (обратите внимание, что IE 8 поддерживает определения свойств после способа .. . но не на объектах JavaScript)
Наконец, в очень вымышленных сценариях вы можете использовать аргументы функций в качестве констант (возможно, именно об этом вы и думали, когда предлагали замыкания?). Хотя они ведут себя как переменные, они остаются в области действия функции, в которой они определены, и поэтому не могут влиять на значения, содержащиеся в переменных с одинаковым именем вне функции, в которой они изменены:
var blah = 3;
var naw = "nope";
(function(blah, naw)
{
blah = 2;
naw = "yeah";
alert(naw + blah); // "yeah2"
})(blah, naw);
alert(naw + blah); // "nope3"
Обратите внимание, что что-то похожее на это , обычно используемое плагинами jQuery , но по противоположной причине: код jQuery обычно пишется с использованием сокращения $
для ссылки на объект jQuery, но библиотека намеревался продолжать работать, даже если какой-то другой код переопределяет этот символ; Оборачивая код библиотеки и плагина в анонимные функции с параметром $
, а затем передавая jQuery
в качестве аргумента, код изолируется от изменений, которые другие библиотеки могут внести в значение $
позже.