Javascript 什么';与直接返回相比,使用自调用函数导出函数的好处是什么

Javascript 什么';与直接返回相比,使用自调用函数导出函数的好处是什么,javascript,Javascript,我检查了很多代码,也看到很多人在做 module.exports = (function(){ return { functionA: function() { } }, functionB: function() { } }; })(); 那么,为什么不这样做呢 module.exports = { functionA: function() { }, functionB: function() { } }; 谢谢

我检查了很多代码,也看到很多人在做

module.exports = (function(){
  return {
    functionA: function() {

      }
    },
    functionB: function() {

    }
  };
})();
那么,为什么不这样做呢

module.exports = {
  functionA: function() {

  },
  functionB: function() {

  }
};

谢谢

这些完全一样。这是一个风格上的决定

根据文件:

模块的局部变量将是私有的,就像模块包装在函数中一样

您也可以这样做:

module.exports.functionA = function() {

};

module.exports.functionB = function() {

};
或:


第一个示例允许您在自己的闭包范围内隐藏变量,这些变量可以与返回对象的方法共享。例如,如果您执行以下操作

var foo = (function(){
   var x = 2;
      return {
        addToTwo: function(y){
        return x + y;
      },
      subtractFromTwo: function(y){
        return x - y;
      }
   }
};
上面的示例显示
x
变量受保护,并在
addToTwo
subtractFromTwo
之间共享。第二个示例仅允许您将
x
作为对象的一部分,而无需相同的保护

module.exports = {
  x: 3,
  functionA: function() {
     return this.x;
  },

};

在本例中,
x
可以更改。

直接调用函数的最大优点之一是不能以单独的方式使用它,因此它们在字面上是不同的

为什么会被否决?这是一个信息丰富的答案。这并不能真正回答人们为什么要这样做,但对于这部分问题,无论如何都没有好的答案。在第一个示例中,自调用函数保留了内部函数的作用域/上下文。有关Node.js模块的更多信息,请参阅。
module.exports = {
  x: 3,
  functionA: function() {
     return this.x;
  },

};