正确使用模块模式语法?

时间:2012-05-19 19:41:13

标签: javascript

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

自执行括号直接放在功能括号后面。所有都包含在括号之间,以使其成为函数表达式。参考here

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

和这种样式,其中自执行括号放在创建函数表达式的括号之后。参考here

var Var = ( function ( window, undefined ) 
{

} )();

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

3 个答案:

答案 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,因为它将一些本地文件显示在全局命名空间中。