我到处都能看到这种语法:
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 返回。
那么,我认为唯一区别是第二个对象作为空对象存在的(非常短的)时间是正确的吗? 而且,我的后续问题:您使用第二种语法吗?为什么?
最佳答案
你是对的。在您的示例中,第一个语法更清晰且更具可读性。
当您想要将空对象以外的东西传递到模块中并获得增强对象作为返回时,可以使用第二种语法。
关于javascript - 这两种不同的模块模式语法之间的功能差异是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24977784/