我有时会看到这样的JS构造:

var foo = (function(){ return some_expression; })();


这可能是什么原因?这与简单得多有什么不同吗?

var foo = some_expression;


我碰巧遇到了这样的示例herewindow.requestAnimFrame = ...代码),但是我在其他许多地方也看到了它。

我知道将内容包装在lambda函数中的一个原因是使变量保持局部,但这不适用于此特定示例。

最佳答案

在您的情况下似乎并没有什么区别,但是在ECMAScript 5之前,undefinedwindow对象的属性并且可写,因此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/

10-09 06:01