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

标签 javascript node.js

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

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/

相关文章:

php - FOR 循环中的 getElementById 不起作用

javascript - 如何发送数字框表情符号 (1️⃣)?

javascript - crypto.rng 从哪里来

javascript - 将div分成方 block

javascript - 如何从异步调用返回响应?

javascript - 绝对定位布局 - 垂直居中于前一个 div

node.js - NodeJS-Socket.IO 设置 : served static content no handshake (Ubuntu on Rackspace Cloud Server)

javascript - 迷失在 Node、Express 和谷歌分析 API 的回调 hell 中

javascript - 在 socket.io 中向套接字添加功能的首选方法是什么?

javascript - findAll() 不是 sequelize 中的函数