【问题标题】:What is the difference between {}()) and {})() [duplicate]{}()) 和 {})() 有什么区别 [重复]
【发布时间】:2017-02-17 18:53:22
【问题描述】:

对不起,这个可怕的标题,一旦人们给我一些方向,我可以为将来更好地编辑它。

我主要是好奇这两者有什么区别

(function() {
   return false; // logs false
}());

and

(function() {
   return false; // Also returns false
})();

是,它们在控制台中似乎都给了我相同的结果,但我确信一定有区别,有人可以告诉我区别以及为什么你会使用其中一个而不是另一个?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    与其他答案一样,没有功能差异

    但是,如果你进入 ES2015,并且使用箭头函数样式 IIFE

    (() => {
       return false; // logs false
    })();
    

    但是,这个版本有效:

      (() => {
         return false; // logs false
      }());
    

    不 - js 引擎抱怨括号中缺少 )

    【讨论】:

      【解决方案2】:

      没有区别——只是用 Javascript 编写 IIFE(立即调用函数表达式)的两种不同方式。无论您选择哪种方式,都是一种约定。

      (如果您需要更多关于 Javascript 中的 IIFE 的信息,这里有一个很棒的 SO here。)

      【讨论】:

        【解决方案3】:

        以下两种模式中的任何一种都可用于 IIFE 使用函数的执行上下文来创建“隐私”。

        (function(){ /* do something */ }()); // Douglas Crockford recommends
        
        (function(){ /* do something */ })(); // This way works as well
        

        为什么? 因为括号的原因是为了区分函数表达式和函数声明,所以当解析器已经期望一个表达式时,它们可以被删除。

        在进行分配时,使用它们的编码约定状态是个好主意。

        【讨论】:

        • Douglas Crockford recommends ... why - 因为他认为 })() 中的最终 () 看起来像狗球一样挂在那里 - 说真的,他的话 - 太糟糕了 ES2015+ 需要狗球才能工作!
        • 是的,正如我提到的公约规定让他们出去玩..你明白了;)
        猜你喜欢
        • 2011-09-27
        • 2013-04-22
        • 2012-03-29
        • 1970-01-01
        • 1970-01-01
        • 2013-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多