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

时间:2016-03-08 21:06:21

标签: javascript node.js

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

var foo = "bar";

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

我从另一个人那里访问它,

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

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

1 个答案:

答案 0 :(得分:1)

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

根据评论更新:

场景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