javascript - 是否可以使用闭包来模拟 Javascript 中的常量?

标签 javascript closures constants

是否可以使用闭包来模拟 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/

相关文章:

javascript - 如何为对话创建背景?

java - 为什么在 Java 中不可能在内部匿名类中引用非最终变量?

python - Python 2.x 中的 nonlocal 关键字

ruby - String(42) 在 Ruby 中有什么作用?

python - 如何在单独的文件中组织所有不同的参数

javascript - 使用 CSS 和 HTML 的垂直树

javascript - js拆分数组添加空间

c - C 中的换行常量

javascript - 错误 - 放大 D3 map - d3.behavior 未定义

C++ 内联闭包模拟