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

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

有时我看到:

(function() { ... }()); 

有时我会看到:

(function() { ... })(); 

我看到两种形式都有和没有参数。 他们 执行匿名函数。

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


这两种形式没有实际区别,但从语法角度来看,两者的区别在于,分组操作符 - 括号 - 在第一个示例CallExpression包含CallExpression ,其中包含FunctionExpression

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

在第二个例子中,我们首先有一个CallExpression ,它包含FunctionExpression

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


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


就差异而言,它实际上只是语法糖。 有点相当于:“你喜欢jQuery()还是$()​​?” 两者都可以被编译,执行和交换使用(AFAIK)。

从我迄今为止看到的代码示例中,更多的人似乎遵循Crockford代码惯例:

(function() { ... }()); 

就个人而言,我更喜欢(function(){})(); 约定,因为它对我来说更为明显,该功能是自动执行的; 我也是jQuery的大用户,这是jQuery源代码中使用的惯例。

此外,无论您选择哪种形式,使用parens来封装您的自我执行功能被认为是一种良好的做法。

链接地址: http://www.djcxy.com/p/51507.html

上一篇: Is there a difference between (function() {...}()); and (function() {...})();?

下一篇: executing anonymous JavaScript functions?