我有时会看到这样的 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:调用 lambda 函数或直接表达式之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46907583/