【问题标题】:What is the functional difference between these two different Module pattern syntaxes这两种不同的模块模式语法之间的功能区别是什么
【发布时间】: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


    【解决方案1】:

    你是对的。在您的示例中,第一种语法更简洁,更具可读性。

    当您想要将空对象以外的东西传递到模块中并获得一个增强对象作为回报时,您可以使用第二种语法。

    【讨论】:

    • 我明白了,这似乎很明显......现在你已经写好了。所以你可以使用第二种语法来构建一个继承自另一个的模块。奇怪的是,到目前为止我只见过它与空对象一起使用。
    猜你喜欢
    • 2011-01-10
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多