javascript - 这两种不同的模块模式语法之间的功能差异是什么

标签 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 返回。

那么,我认为唯一区别是第二个对象作为空对象存在的(非常短的)时间是正确的吗? 而且,我的后续问题:您使用第二种语法吗?为什么?

最佳答案

你是对的。在您的示例中,第一个语法更清晰且更具可读性。

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

关于javascript - 这两种不同的模块模式语法之间的功能差异是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24977784/

相关文章:

javascript - 使 jquery 自动完成也可以由箭头控制

javascript - 随机化保持键值对的javascript数组

c# - 这是 MVC 反模式吗?

javascript,立即函数的正确使用?

javascript - JavaScript 中的 (function() { } )() 结构是什么?

Javascript IIFE 项目间代码共享

javascript - jQuery - 使用选择框控制 div 可见性

javascript - 与 webpack 捆绑时,TTF 字体不会显示在浏览器中

javascript - 模块模式中的 this 关键字?

c++ - "clean object model"是什么意思?