Javascript:调用 lambda 函数或直接表达式之间的区别?

标签 javascript function lambda expression

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

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

这可能是什么原因?这与更简单的方法有什么不同吗:

var foo = some_expression;

我碰巧遇到过这样的例子here (window.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:调用 lambda 函数或直接表达式之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46907583/

相关文章:

algorithm - 循环检测算法

javascript - 当没有其他可能性时,使用 "else if"代替 "else"

javascript - 为什么 RegEx.test 会在后续调用中更改结果?

javascript - 动态加载iframe时是否出现 "request sent - waiting for response event"?

c# - C# 中的内联 lambda 函数创建行为

node.js - 为什么我不能将 api 参数传递给 lambda 函数?

python - 如何在 Python 中创建修改变量的内联函数?

javascript - Jupyter Notebook 中的 Google Colabs eval_js?

swift - 为什么这不算作闭包捕获?

javascript - 如何求一系列数字的最小公倍数?