我到处都看到这种语法:
var mod = (function(){
var pvtvar;
var pvtfunc = function(){};
//return an object literal
return {
pubvar : 'whatever',
pubfunc : function(){}
};
}());
我最近遇到了这种语法:
//first create empty object
var mod = {};
(function(mod){
var pvtvar;
var pvtfunc = function(){};
//modify the mod object argument
mod.pubvar = 'whatever';
mod.pubfunc = function(){};
}(mod)); //pass object to IIFE
我知道他们都工作,我想我完全理解为什么,我只是想确保我没有遗漏任何东西......鉴于相同的成员你最终得到相同的对象,只是在第二个例子中mod
引用全局范围内的空对象几分之一秒,而在第一个例子中mod
只有在它的值返回时才引用整个对象。 IIFE。
那么,我是否认为唯一差异是第二个对象作为空对象存在的(非常小的)时间量? 而且,我的后续问题:你使用第二种语法,为什么?
答案 0 :(得分:1)
你是对的。在您的示例中,第一种语法更清晰,更易读。
如果要将除空对象之外的内容传递到模块中并获取增强对象作为回报,则使用第二种语法。