前言
众所周知,esmodule导出的值是对应模块导出值的引用,一旦模块内部使该值发生了变化,获得的值也会变化。而commonjs种的require函数,是获取了该模块导出值的拷贝,如果原模块中的值发生了变化,是拿不到最新的值的,那么有没有办法可以获取到最新的值呢。
解决思路
- 既然正常方法是拿不到对应的值,那么通过闭包是不是可以呢,说试就试。
test.js
let obj = { a: 1 };
setTimeout(() => {
obj.a = 2;
}, 2000)
const getFn = () => {
return () => {
return obj;
}
};
const fn = getFn();
exports.getA = fn;
index.js
const a = require('./test').getA();
setTimeout(() => {
console.log(a); // { a: 2 }
}, 3000);
- 结果就是可以,将一个闭包函数抛出来,利用闭包的特性是可以达到这样的效果的。