在Node.js中导出模块时的依赖关系范围

jcz*_*lew 3 javascript node.js

导出具有其他依赖关系的模块时,最好是在模块导出函数中还是在模块导出函数之外包含该依赖关系?我通常会看到后者,但似乎最好将它保留在本地范围内.

例如:

var foo = require('foo');

module.exports = function(d) {
    return foo(d)/2;
}
Run Code Online (Sandbox Code Playgroud)

module.exports = function(d) {
    var foo = require('foo');

    return foo(d)/2;
}
Run Code Online (Sandbox Code Playgroud)

Sea*_*ira 6

只有在节点中的其他模块上可以访问module.exportsglobal可以访问的内容.与浏览器不同,var创建本地引用.引用节点的文档:

在浏览器中,顶级范围是全局范围.这意味着在浏览器中,如果您在全局范围内,var会定义一个全局变量.在Node中,这是不同的.顶级范围不是全球范围; var somethingNode模块内部将是该模块的本地模块.

这两个版本之间的差异是最小的,因此-第一招在局部范围内查找,而另一个命中require.cache每次调用函数时.从我所看到的节点代码来看,前者(var someVar = require('something');)似乎是首选.