(function(){...}())之间有区别吗?和(function(){...})();?

Pet*_*tai 22 javascript anonymous-function

可能重复:
自动执行匿名JavaScript函数的括号位置?

有时我看到:

(function() { ... }()); 
Run Code Online (Sandbox Code Playgroud)

有时我看到:

(function() { ... })(); 
Run Code Online (Sandbox Code Playgroud)

我看到有和没有参数的两种形式.它们 执行匿名功能.

这两种形式有区别吗?是否有任何令人信服的理由使用一种形式而不是另一种形式?

CMS*_*CMS 35

这两种形式没有实际区别,但从语法的角度来看,两者之间的区别在于分组算子 - 括号 - 将在第一个例子中保存CallExpression,包括FunctionExpression:

               CallExpression
                |         |
       FunctionExpression |
                |         |
                V         V
    (function() {       }());
    ^                      ^
    |--PrimaryExpression --|

在第二个例子中,我们首先得到一个整体CallExpression,它包含FunctionExpression:

          PrimaryExpression
                |
         FunctionExpression
                |
                V
    (function() {       })();
    ^                      ^
    |--  CallExpression  --|


cwe*_*der 5

就编译器而言,两者之间没有区别.但是,会发现(function () {}())Douglas Crockford的JavaScript 代码约定中推荐使用该样式.

  • 为了更清楚,Crockford没有(明确地)推荐该链接中的任何一种形式.Crockford建议的唯一相关内容是将自执行功能包装在parens中. (3认同)