Node.js中如何在b.js获取a.js更新后的导出变量值?
解决方法:获取更新后的变量值
嘿,这个问题我之前也碰到过!核心原因是JavaScript里原始类型的传值机制——字符串属于原始值,当你在a.js里写exports.A = obj.a时,你其实把obj.a当时的"a"复制了一份导出,而不是导出对obj.a的引用。所以哪怕后面updateA()把obj.a改成了"b",b.js里的A还是之前那个复制出来的"a",不会跟着变。
下面给你几种可行的解决方案:
方案1:导出整个对象
因为对象是引用类型,导出对象的引用后,后续修改对象属性时,其他文件通过引用访问就能拿到最新值。
修改后的a.js:
const obj = {a: "a"} function updateA() { obj.a = "b" } // 导出整个obj和updateA函数 module.exports = { obj, updateA }
对应的b.js:
const { obj, updateA } = require("./a.js") console.log(obj.a) // 输出 "a" updateA() console.log(obj.a) // 输出 "b"
方案2:导出一个获取值的函数
通过函数来动态读取当前obj.a的值,每次调用函数都会拿到最新的结果。
修改后的a.js:
const obj = {a: "a"} function updateA() { obj.a = "b" } function getA() { return obj.a } module.exports = { getA, updateA }
对应的b.js:
const { getA, updateA } = require("./a.js") console.log(getA()) // 输出 "a" updateA() console.log(getA()) // 输出 "b"
方案3:用ES6 getter导出
这种方式可以让你像访问普通变量一样获取最新值,本质是通过getter函数动态返回当前值。
修改后的a.js:
const obj = {a: "a"} function updateA() { obj.a = "b" } module.exports = { // 定义getter属性A get A() { return obj.a }, updateA }
对应的b.js:
const { A, updateA } = require("./a.js") console.log(A) // 输出 "a" updateA() console.log(A) // 输出 "b"
内容的提问来源于stack exchange,提问作者chxru
相关产品推荐
相关产品推荐

