全球帮手function和导出function

我写了一个node.js模块,它有一个main函数和两个helper函数,我只导出了main函数,我的问题是:可以保持两个helpers像全局函数还是我可以find更好的方法?

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

我想你不需要担心其他模块的范围。 不过我明白你的感受。 如果你想保持清洁你的感觉,你可以使用下面的Self invoking function 。 你知道,即使在nodejs之外,你也可以在所有的javascript环境中使用这个模式。

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

你可以使用嵌套函数:

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

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

如果可见度/范围远远大于其适用范围,则某些事物的可见性/范围往往会成为问题。

例如,一个声明在一个大型函数顶部的variables可能是一个跳闸点,如果它被声明/定义在最上面但是只被底部的3行代码所使用,则会成为混淆和维护问题的来源。 在这种情况下,variables的可见性比它的适用范围要宽得多,因此读者在追踪函数的时间要比实际使用的时间长时,必须考虑到这一点,增加了智力开销。 当然,大规模的function也往往是一种气味,但这是另一回事。

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

也就是说,即使是纯粹的组织目的,嵌套的函数也是非常方便的,如果你以前没有遇到它们,正是因为它们允许你避免污染一个外部的范围。 所以在这种情况下,它们可能是一个方便的select。 但是,不要太担心已经非常狭窄的函数(或其他)的范围。