(function(){…}())之间有区别吗? 和(function(){…})();?
可能重复:
自动执行匿名JavaScript函数的括号的位置?
有时我看到:
(function() { ... }());
有时我会看到:
(function() { ... })();
我看到两种forms有和没有论据。 他们都 执行匿名函数。
这两种forms有什么区别? 是否有任何令人信服的理由使用其中一种forms?
这两种forms没有实际区别,但从语法的angular度来看,两者之间的区别在于, 分组操作符 – 括号 – 将在第一个示例中包含CallExpression
,其中包括FunctionExpression
:
CallExpression | | FunctionExpression | | | VV (function(){}()); ^ ^ | --PrimaryExpression - |
在第二个例子中,我们首先有一个CallExpression
,它包含FunctionExpression
:
PrimaryExpression | FunctionExpression | V (function(){})(); ^ ^ | - CallExpression - |
就编译器而言,两者没有什么区别。 但是,在Douglas Crockford的JavaScript 代码约定中会发现(function () {}())
风格是推荐的。
就差异而言,它实际上只是语法糖。 有点相当于:“你喜欢jQuery()还是$()?” 两者都可以被编译,执行和交换使用(AFAIK)。
从迄今为止我看到的代码示例中,更多的人似乎遵循Crockford代码惯例:
(function() { ... }());
我个人更喜欢(function(){})();
因为对我来说这个function是自我执行的更为明显; 我也是jQuery的大用户,这是jQuery源代码中使用的惯例。
另外,无论您select哪种forms,使用parens来包装您的自我执行function被认为是一种很好的做法。