Javascript 在Node.js中导出模块时的依赖项范围

Javascript 在Node.js中导出模块时的依赖项范围,javascript,node.js,Javascript,Node.js,导出具有另一依赖项的模块时,最好将该依赖项包含在模块导出函数内还是模块导出函数外?我通常看到后者,但似乎最好将其保留在局部范围内 例如: var foo = require('foo'); module.exports = function(d) { return foo(d)/2; } vs 只能从节点中的其他模块访问模块.exports和global上公开的内容。与浏览器中不同,var创建本地引用。引自: 在浏览器中,顶级作用域是全局作用域。这意味着,在浏览器中,如果您在全局范围

导出具有另一依赖项的模块时,最好将该依赖项包含在模块导出函数内还是模块导出函数外?我通常看到后者,但似乎最好将其保留在局部范围内

例如:

var foo = require('foo');

module.exports = function(d) {
    return foo(d)/2;
}
vs


只能从节点中的其他模块访问
模块.exports
global
上公开的内容。与浏览器中不同,
var
创建本地引用。引自:

在浏览器中,顶级作用域是全局作用域。这意味着,在浏览器中,如果您在全局范围变量中,则会定义一个全局变量。在节点中,这是不同的。顶层范围不是全局范围<代码>变量节点模块中的某个内容
将位于该模块的本地


因此,这两个版本之间的差异很小——第一个版本在本地范围内进行查找,而另一个版本在每次调用函数时都进行查找。从我对节点代码的了解来看,前者(
var-someVar=require('something');
)似乎更受欢迎。

谢谢您的回答!我的理解是,局部范围中的查找只发生一次——在定义函数时。这是真的吗?如果是这样,前一种方法最有意义。否则,您知道本地作用域中的查找与命中到require.cache相比有多昂贵吗?作用域查找可能是强度较低的查找-查找是动态的(IIRC)但是对于JITC来说,几乎可以肯定的是,它比
require
+函数调用+
require.cache
中的查找更容易优化。
module.exports = function(d) {
    var foo = require('foo');

    return foo(d)/2;
}