这两种不同的模块模式语法之间的功能区别是什么

时间:2014-07-27 03:59:48

标签: javascript design-patterns iife

我到处都看到这种语法:

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。

那么,我是否认为唯一差异是第二个对象作为空对象存在的(非常小的)时间量? 而且,我的后续问题:你使用第二种语法,为什么?

1 个答案:

答案 0 :(得分:1)

你是对的。在您的示例中,第一种语法更清晰,更易读。

如果要将除空对象之外的内容传递到模块中并获取增强对象作为回报,则使用第二种语法。