全局辅助函数和导出函数
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;
};
})();
我写了一个 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;
};
})();