【发布时间】:2014-09-18 14:38:26
【问题描述】:
我到处都能看到这种语法:
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 design-patterns iife