全局辅助函数和导出函数

时间:2015-12-09 01:52:31

标签: javascript node.js architecture module

我编写了一个node.js模块,它有一个main函数和两个辅助函数,我只导出了main函数,我的问题是:是否可以保留两个帮助器,如全局函数或我能找到更好的方法吗?

function myFirstHelper(args) {
    // ...
    return result;
}

function mySecondHelper(args) {
    // ...
    return result;
}

module.exports = function main(args) {
    // ...
    return result;
};

2 个答案:

答案 0 :(得分:1)

我认为您不必担心其他模块的范围。 但是我理解你的感受。如果你想保持清洁的感觉,可以使用下面的Self invoking function。 你知道,即使在nodejs之外,你也可以在所有的javascript环境中使用这种模式。

(function(){

    function myFirstHelper(args) {
        // ...
        return result;
    }

    function mySecondHelper(args) {
        // ...
        return result;
    }

    exports.main = function(args) {
        // ...
        return result;
    };

})();

答案 1 :(得分:0)

您可以使用嵌套函数:

module.exports = function main(args) {
    function myFirstHelper() {
        // ...
        return result;
    }

    function mySecondHelper() {
        // ...
        return result;
    }
    // ...
    return result;
};

...并且不需要传递args,因为这些嵌套函数可以访问它们。但除非你的模块很大,否则没有理由担心这个问题。

如果可见性/范围远大于其适用性,则某些内容的可见性/范围往往会出现问题。

例如,在大型函数顶部声明的变量可能是一个跳闸点,如果它在最顶部声明​​/定义但仅由3行代码用于底部,则可能是混淆和维护问题的根源。在这种情况下,变量的可见性明显宽于其适用性,因此读者必须在跟踪函数的时间比实际使用的时间长得多,从而增加智能开销。当然,大量的功能也往往是一种气味,但这是另一回事。

所以这里有你在模块中可见的功能。如果模块很小并且主要由使用这些功能的代码组成,那么这些功能的可见性/范围并不比模块中的适用性/用途宽得多。

也就是说,嵌套函数即使出于纯粹的组织目的也很方便,如果你之前没有遇到它们,正是因为它们允许你避免污染外部作用域。因此,在这种情况下,它们可能是一个方便的替代方案。但是不要过分担心已经非常狭窄的函数(或任何东西)的范围。