是否可以使用闭包来模拟 Javascript 中的常量?如果是这样,您能给我举个例子吗?
最佳答案
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;
“模拟”常量的另一个选项是使用 property definition functionality在某些浏览器中可用于定义对象的只读属性。当然,由于支持属性定义的浏览器不包括 IE,所以这并没有真正的帮助...(请注意 IE8 确实支持属性定义 after a fashion ...但不支持 JavaScript对象)
最后,在非常的场景中,您可能会使用函数参数作为常量(也许这就是您在建议闭包时所想到的?)。虽然它们表现为变量,但它们的作用域仍然是定义它们的函数,因此不能影响修改它们的函数外部同名变量所保存的值:
var blah = 3;
var naw = "nope";
(function(blah, naw)
{
blah = 2;
naw = "yeah";
alert(naw + blah); // "yeah2"
})(blah, naw);
alert(naw + blah); // "nope3"
请注意,与此类似的内容是 commonly used by jQuery plugins ,但出于相反的原因:jQuery 代码通常使用 $
简写来引用 jQuery 对象,但即使其他代码重新定义了该符号,该库仍会继续工作;通过使用 $
参数将库和插件代码包装在匿名函数中,然后传入 jQuery
作为参数,代码与其他库可能对值所做的更改隔离开来$
稍后。
另请参阅:Are there constants in Javascript?
关于javascript - 是否可以使用闭包来模拟 Javascript 中的常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/622906/