是否可以使用闭包在Javascript中模拟常量?如果是的话,你能告诉我一个例子吗?
Firefox和Chrome都支持该const
关键字.IE没有.因此,如果您需要常量而不需要支持IE,那么const
这不是一个糟糕的选择.但请记住,当一个值分配给a时,浏览器都不会产生运行时错误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
作为参数传入,代码与其他库可能对$
以后的值进行的更改隔离开来.