Node module.exports和LIFE混淆

时间:2014-08-17 17:24:04

标签: javascript node.js iife

我一直在玩节点和Javascript IIFE,我对节点的 modules.exports 以及IIFE如何在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));

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

为什么当我使用参数计算器=计算器(注意案例)导致我的测试全部失败?

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

简而言之:

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

module.exports = calculator; //工作

1 个答案:

答案 0 :(得分:2)

我认为这很有趣所以我要添加它。 @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);