节点的模块导出和IIFE混淆

我一直在玩节点和Javascript的IIFE和我有点困惑节点的modules.exports和IFFE如何在Javascript中工作。

(function (Calculator) { var calculator = function () { var currentValue = 0, add = function (num) { return currentValue += num; }; return { current: currentValue, add: add }; }(); module.exports = calculator; }(module.exports)); 

上面的代码导致我的testing通过,当我使用line module.exports = calculator; 导出模块。

如何当我使用参数计算器=计算器 (注意的情况下)导致我的testing都失败?

我认为Calculator (参数)是指module.exports (传入的值?

简而言之:

计算器=计算器; //不起作用

module.exports = calculator; //工作

我觉得这很有趣,所以我要添加它。 @ dandavis对他们是一样的。 但是我只是从玩它的问题中发现,你可以通过传入的值来改变全局。下面的代码将calculator作为全局module.exports的值。 至less它与我正在玩的这个gulp东西有关。 不过,我不是一个节点专家,所以也许它在真正的节点服务器领域有所不同。

 (function (Calculator) { var calculator = function() { var currentValue = 0, add = function(num) { return currentValue += num; }; return { current: currentValue, add: add }; }(); Calculator.exports = calculator; })(module);