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;
},
};