(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() {...})();?