可能的重复:
自动执行匿名 JavaScript 函数的括号位置?
有时我会看到:
(function() { ... }());
有时我会看到:
(function() { ... })();
这两种形式有区别吗?使用一种形式而不是另一种形式有什么令人信服的理由吗?
可能的重复:
自动执行匿名 JavaScript 函数的括号位置?
有时我会看到:
(function() { ... }());
有时我会看到:
(function() { ... })();
这两种形式有区别吗?使用一种形式而不是另一种形式有什么令人信服的理由吗?
这两种形式没有实际区别,但从语法的角度来看,两者之间的区别在于分组运算符- 括号 - 将在第一个示例 a 中成立CallExpression,其中包括FunctionExpression:
调用表达式
| |
函数表达式 |
| |
VV
(功能() { }());
^ ^
|--主要表达式--|
在第二个例子中,我们首先有一个整体CallExpression,它包含FunctionExpression:
主表达式
|
函数表达式
|
伏
(功能() { })();
^ ^
|-- 调用表达式--|
就编译器而言,两者没有区别。但是,会发现(function () {}())Douglas Crockford 的 JavaScript代码约定中推荐的样式。
就差异而言,它实际上只是语法糖。有点等同于:“你喜欢 jQuery() 还是 $()?” 两者都可以编译、执行和互换使用 (AFAIK)。
从我目前看到的代码示例来看,似乎有更多人遵循 Crockford 代码约定:
(function() { ... }());
就我个人而言,我更喜欢这种(function(){})();约定,因为对我来说更明显的是该函数是自动执行的;我也是 jQuery 的大用户,这是 jQuery 源代码中使用的约定。
此外,无论您选择使用哪种形式,使用括号来包含您的自执行函数被认为是一种很好的做法。