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