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;
}