javascript - JavaScript 闭包函数外加括号的用途

标签 javascript closures

<分区>

下面的 JavaScript 闭包函数的外部额外括号的目的是什么?我在其他帖子中被告知它们不是绝对必要的,但它们是一种约定,以明确传递的是函数的结果,而不是函数本身。以下引自http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html 但是,冲突。哪个是正确的?

Notice the () around the anonymous function. This is required by the language, since statements that begin with the token function are always considered to be function declarations. Including () creates a function expression instead.

(function () {
    // ... all vars and functions are in this scope only
    // still maintains access to all globals
}());

最佳答案

我认为不同的引擎有不同的解释方式

函数(){...}();

因此,为了让所有引擎都清楚,最流行和接受的方式是将代码分组在括号中。

(函数(){...}());

与此同时,您引用的内容提出了一个非常有趣的观点。函数表达式可能是:

var f = function() {...}

而函数声明看起来像:

函数 f() {...}

您看到解析器通过查看第一个标记来区分差异是多么容易/方便吗?

IF TOKEN1 EQ "function": FXN DECLARATION
ELSE: FXN EXPRESSION

但是将您的(立即调用的)函数作为函数声明是没有意义的(它不会被重新使用,您不想提升它,或者在命名空间中,等等。 ) 所以添加一些无害的括号是表明它是一个函数表达式的好方法。

关于javascript - JavaScript 闭包函数外加括号的用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15789880/

相关文章:

JavaScript:带有函数数组的TypeError

javascript - 如何在 knockout.js 中的 foreach 中使用计算方法

arrays - 在 Collection View 中使用来自转义闭包的数组

javascript - jQuery html 脚本 document.currentScript

javascript - 如何改变一个对象的各级键的值?

javascript私有(private)变量访问问题

arrays - SWIFT OS X - 闭包语句内的多个语句,调试工具?

javascript - 在 javascript 中向第三方闭包添加函数

javascript - EmberJS 可选参数

javascript - 使用 jQuery 仅抓取单击事件上的按钮元素