2

我见过两种方法……第一种对我来说最有意义。

自执行括号直接放在函数括号之后。All 包含在括号之间以使其成为函数表达式。参考这里

( function () {
    // ... all vars and functions are in this scope only
    // still maintains access to all globals
} () );

和这种风格,其中自我执行括号放在括号之后,创建函数表达式。参考这里

var Var = ( function ( window, undefined ) 
{

} )();

我不确定 var 是否会影响语法...?

4

3 回答 3

4

您的问题的答案在我的第一条评论中有关即时功能的链接中。本质上,如果您只想要一个立即函数,只要函数声明本身包含在括号中,调用括号是否跟随花括号或跟随括号都无关紧要。但是,如果您不想要包装括号,则分配 toVar变得相关,因为这将起作用:

var Var = function () {
    // do stuff; return stuff;
}();

但这不会:

function () {
    // do stuff;
}();

因为它只是一个函数声明,后跟一对意外的括号(语法错误)。

于 2012-05-19T19:52:54.270 回答
3

两者之间没有区别:

(function () {})();

(function () {}());

Douglas Crockford 提倡第二种风格(所以 JSLint 会抱怨第一种风格)。他说第一个“适得其反”,不管这意味着什么……我更喜欢第一个。

于 2012-05-19T20:14:52.050 回答
0

它实际上是2种不同的模式。第二种模式称为显示模块模式,因为它将一些局部变量显示到全局命名空间中。

于 2012-05-19T20:10:21.080 回答