【问题标题】:Bracket placement in IIFE [duplicate]IIFE中的括号放置[重复]
【发布时间】:2018-06-12 11:39:39
【问题描述】:

多年来我一直这样写 IIFE:

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

但我最近遇到了这样一个,最后两个括号位于最后一个括号内:

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

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

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

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

【问题讨论】:

  • 但是!function () { console.log("hi"); }();(或+或-或~)确实如此
  • 为了完整性...(()=> {})() 是唯一适用于箭头=> 的语法(我认为)
  • @JaromandaX 有趣,谢谢!现在花剩下的时间想一个使用!function () { ... }();的理由:)

标签: javascript iife


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    (function() {})
    

    不适用于函数语句。

    【讨论】:

      猜你喜欢
      • 2016-07-04
      • 2015-11-01
      • 1970-01-01
      • 2021-11-06
      • 2019-05-19
      • 2021-04-19
      • 2019-01-11
      • 1970-01-01
      • 2016-04-02
      相关资源
      最近更新 更多