IIFE中的支架放置

时间:2018-06-12 11:39:39

标签: javascript iife

多年来,我总是写这样的IIFE:

(function () {
    console.log("hi");
})();

但我最近遇到了一个像这样的最后两个括号内的最后一个:

(function () {
    console.log("hi");
}());

我认为它不会起作用,但令人惊讶的是它确实如此。然而,这显然不是:

function () {
    console.log("hi");
}();

这是为什么?两个工作版本似乎做同样的事情,但是有区别吗?

2 个答案:

答案 0 :(得分:0)

您可以从MDN找到更多信息。

  

这是一种设计模式,也称为自执行匿名函数,包含两个主要部分。第一个是包含在Grouping Operator()中的词法范围的匿名函数。这可以防止访问IIFE习语中的变量以及污染全局范围。

     

第二部分是创建立即执行的函数expression(),JavaScript引擎将通过它直接解释函数。

所以第一部分回答了你的问题,你需要Grouping Operator()来阻止访问IIFE习语中的变量以及污染全局范围

答案 1 :(得分:0)

因为IIFE仅适用于以下函数表达式:

(function() {})

不使用函数语句。