全局辅助函数和导出函数

Global helper functions and exported function

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

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

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

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

您可以使用嵌套函数:

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

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

... 并且不需要传递 args 因为这些嵌套函数可以访问它。然而,除非您的模块非常大,否则没有理由担心这一点。

只有当 visibility/scope 比它的适用范围广得多时,visibility/scope 的东西才会有问题。

例如,在大型函数的顶部声明的变量如果在最顶部 declared/defined 但仅由 3 行代码朝向底部。在这种情况下,变量的可见性远比其适用性广,因此 reader 必须在跟踪函数时考虑到比实际使用时间长得多的时间,增加智力开销。当然,海量的函数也往往是有味道的,但那是另外一回事了。

所以这里有在模块中可见的函数。如果模块很小并且主要由使用这些函数的代码组成,那么这些函数的 visibility/scope 不会比它们在模块中的 applicability/usage 宽很多。

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

我认为您不必担心其他模块的作用域。 不过我理解你的感受。如果你想保持干净的感觉,你可以使用下面的 Self invoking function。 您知道,您可以在所有 javascript 环境中使用此模式,甚至在 nodejs 之外。

(function(){

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

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

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

})();