多年来,我总是写这样的IIFE:
(function () {
console.log("hi");
})();
但我最近遇到了一个像这样的最后两个括号内的最后一个:
(function () {
console.log("hi");
}());
我认为它不会起作用,但令人惊讶的是它确实如此。然而,这显然不是:
function () {
console.log("hi");
}();
这是为什么?两个工作版本似乎做同样的事情,但是有区别吗?
答案 0 :(得分:0)
您可以从MDN找到更多信息。
这是一种设计模式,也称为自执行匿名函数,包含两个主要部分。第一个是包含在Grouping Operator()中的词法范围的匿名函数。这可以防止访问IIFE习语中的变量以及污染全局范围。
第二部分是创建立即执行的函数expression(),JavaScript引擎将通过它直接解释函数。
所以第一部分回答了你的问题,你需要Grouping Operator()
来阻止访问IIFE习语中的变量以及污染全局范围
答案 1 :(得分:0)
因为IIFE仅适用于以下函数表达式:
(function() {})
不使用函数语句。