我见过两种方式......第一种方式对我来说最有意义。
自执行括号直接放在功能括号后面。所有都包含在括号之间,以使其成为函数表达式。参考here
( function () {
// ... all vars and functions are in this scope only
// still maintains access to all globals
} () );
和这种样式,其中自执行括号放在创建函数表达式的括号之后。参考here
var Var = ( function ( window, undefined )
{
} )();
我不确定var是否会对语法产生影响......?
答案 0 :(得分:4)
您的问题的答案在我的第一条评论中的immediate functions链接中。本质上,如果你只想要一个立即函数,只要函数声明本身包含在括号中,调用的parens是否遵循花括号或跟随包装括号无关紧要。但是,如果您不想要包装parens,则Var
的分配变得相关,因为这将起作用:
var Var = function () {
// do stuff; return stuff;
}();
但这不会:
function () {
// do stuff;
}();
因为它只是一个函数声明,后跟一对意外的括号(语法错误)。
答案 1 :(得分:3)
之间没有区别:
(function () {})();
和
(function () {}());
道格拉斯·克罗克福德(Douglas Crockford)提倡第二种(因此JSLint会抱怨第一种风格)。他说第一个是“适得其反”,不管这意味着什么......我更喜欢第一个。
答案 2 :(得分:0)
实际上是两种不同的模式。第二个模式称为the revealing module pattern,因为它将一些本地文件显示在全局命名空间中。