Javascript 节点';s模块。导出和iLife混淆
我一直在玩node和Javascript iLife,我对node的模块、导出和iLife在Javascript中的工作方式有点困惑Javascript 节点';s模块。导出和iLife混淆,javascript,node.js,iife,Javascript,Node.js,Iife,我一直在玩node和Javascript iLife,我对node的模块、导出和iLife在Javascript中的工作方式有点困惑 (function (Calculator) { var calculator = function () { var currentValue = 0, add = function (num) { return currentValue += num; }
(function (Calculator) {
var calculator = function () {
var currentValue = 0,
add = function (num) {
return currentValue += num;
};
return {
current: currentValue,
add: add
};
}();
module.exports = calculator;
}(module.exports));
当我使用行module.exports=calculator时,上面的代码导致我的测试通过导出模块
为什么当我使用参数Calculator=Calculator(注意案例)时会导致我的测试全部失败
我想,计算器(参数)指的是模块。导出(传入的值
简言之:
计算器=计算器;//不工作
module.exports=calculator;//确实有效我认为这很有趣,所以我要添加它。@dandavis说它们是一样的,这是对的。但我刚刚发现,通过使用它,您可以从传入的值更改全局值。下面确实将
calculator
作为全局module.exports
的值。
至少在我玩的这个gulp
东西上是这样。不过我不是节点专家,所以在真正的节点服务器领域可能会有所不同
(function (Calculator) {
var calculator = function() {
var currentValue = 0,
add = function(num) {
return currentValue += num;
};
return {
current: currentValue,
add: add
};
}();
Calculator.exports = calculator;
})(module);
它们确实==相同的值,但名称不同,因此将值重新分配给本地名称对全局名称没有任何影响。module.exports对象由模块创建system@dandavis:这是一个答案,不是注释。:-(但没有“全局”计算器))我通常在注释中用英语,在答案中用格式JS(如果存在强烈需求)。