如果我在一个模块中有这样的代码,
var foo = "bar";
module.exports = function() {
console.log(foo);
}
然后我像这样从另一个访问它,
var mod = require('above-module');
mod();
它是否能够访问模块本地的变量“foo”,或者在“require”缓存导出函数后它是否超出范围?
最佳答案
是的,你可以做到这一点。通常像这样的问题是不受欢迎的,因为通过尝试可以更快地回答它们。这样你也会更快地得到答案
根据评论更新:
场景一(无错误)
假设您有两个模块,模块 A 和模块 B
模块A
var foo = "bar";
module.exports = function() {
console.log(foo);
}
模块 B
var mod = require('A');
mod();
如果模块 B 运行,“bar”将记录在控制台中。如果你试图直接从另一个模块访问模块 A 的 foo,你会得到错误,因为 foo 超出了范围。
场景2(未定义错误)
如果你试图从另一个模块中的模块A访问foo,会出现错误
模块 C
var mod = require('A');
console.log(foo); //error. undefined. foo is out of scope here
console.log(mod.foo); //also an undefined error
场景三(重新定义A,允许模块外的foo访问)
如果您需要在模块 A 之外访问 foo,则需要将其导出。最简单的方法是将其作为属性添加到导出的函数中
重新定义模块A
var foo = "bar";
module.exports = function() {
console.log(foo);
}
module.exports.foo = foo;
然后就可以这样访问了
模块访问 foo
var mod = require('A');
var foo = mod.foo; //access foo in module A like so
关于javascript - module.exports 中的函数可以访问模块中的全局变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35878005/