我编写了一个node.js模块,它有一个main
函数和两个辅助函数,我只导出了main
函数,我的问题是:是否可以保留两个帮助器,如全局函数或我能找到更好的方法吗?
function myFirstHelper(args) {
// ...
return result;
}
function mySecondHelper(args) {
// ...
return result;
}
module.exports = function main(args) {
// ...
return result;
};
答案 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行代码用于底部,则可能是混淆和维护问题的根源。在这种情况下,变量的可见性明显宽于其适用性,因此读者必须在跟踪函数的时间比实际使用的时间长得多,从而增加智能开销。当然,大量的功能也往往是一种气味,但这是另一回事。
所以这里有你在模块中可见的功能。如果模块很小并且主要由使用这些功能的代码组成,那么这些功能的可见性/范围并不比模块中的适用性/用途宽得多。
也就是说,嵌套函数即使出于纯粹的组织目的也很方便,如果你之前没有遇到它们,正是因为它们允许你避免污染外部作用域。因此,在这种情况下,它们可能是一个方便的替代方案。但是不要过分担心已经非常狭窄的函数(或任何东西)的范围。