繁体   English   中英

可以在module.exports函数中访问模块中的全局变量吗?

[英]Can function in module.exports access global variable in module?

如果我在一个模块中有这样的代码,

var foo = "bar";

module.exports = function() {
    console.log(foo);
}

我从另一个像这样访问它,

var mod = require('above-module');
mod();

它是否能够访问模块本地的变量'foo',或者在'require'缓存导出的函数后是否超出范围?

是的,你可以这样做。 通常这样的问题是不受欢迎的,因为通过尝试它们可以更快地回答它们。 你也可以更快地得到你的答案

根据评论更新:

场景1(没有错误)

假设您有两个模块,模块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

场景3(重新定义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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM