Javascript 两种类型代码之间的差异-模块

Javascript 两种类型代码之间的差异-模块,javascript,module,Javascript,Module,这两种代码之间有什么区别? 为什么第一个比第二个好 let mod1 = (function () { return { isCuteMixin: function(obj) { obj.isCute = _ => true; }, singMixin: function(obj){ obj.sing = _ => {console.log("Singing to an awesome tune");}

这两种代码之间有什么区别? 为什么第一个比第二个好

let mod1 = (function () {
    return {
      isCuteMixin: function(obj) {
        obj.isCute = _ => true;
      },
      singMixin: function(obj){ 
        obj.sing = _ => {console.log("Singing to an awesome tune");}
        }
    }
  })();

  let mod2 = {
    isCuteMixin: function(obj) {
        obj.isCute = _ => true;
      },
      singMixin: function(obj){ 
        obj.sing = _ => {console.log("Singing to an awesome tune");}
        }
    };

第一个是立即调用的函数,返回一个对象,第二个是对象

函数中的所有函数都可以访问变量,而这些变量不能从函数外部访问。因此,您可以在第一个版本中保留与模块相关的私有变量


也就是说,现在我会选择ES模块:

   const privateVariable = "whatever";

   export function someMethod() { /*...*/ }

这是第一种方法的唯一优点吗?