我有时会看到这样的JS构造:
var foo = (function(){ return some_expression; })();
这可能是什么原因?这与简单得多有什么不同吗?
var foo = some_expression;
我碰巧遇到了这样的示例here(
window.requestAnimFrame = ...
代码),但是我在其他许多地方也看到了它。我知道将内容包装在lambda函数中的一个原因是使变量保持局部,但这不适用于此特定示例。
最佳答案
在您的情况下似乎并没有什么区别,但是在ECMAScript 5之前,undefined
是window
对象的属性并且可写,因此undefined = "123"
将替换其值。这意味着,只要这行代码下方的任何程序都会尝试检查类似以下内容的代码,
var foo;
foo === undefined // false
一个人会得到错误的结果。
为了避免这种情况,使用了这样的编码模式-
(function(foo, bar, undefined) {
// your code here
// undefined here will always be the correct value (i.e., undefined === undefined) regardless of it being polluted somewhere outside this block
})(foo, bar)
但是,这是ES5之前的版本。所以,没关系了
关于javascript - Javascript:调用lambda函数还是直接表达之间的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46907583/