Node 中循环引用会发生什么
Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 291
Author 回答者: mrrs878
在 CommonJS 规范中,当遇到require()
语句时,会执行require
模块中的代码,并缓存执行的结果,当下次再次加载时不会重复执行,而是直接取缓存的结果。正因为此,出现循环依赖时才不会出现无限循环调用的情况。
// a.js
const { b } = require("./b");
const a = 11;
console.log("b in a.js", b);
module.exports = { a };
// b.js
const { a } = require("./a");
const b = 12;
console.log("a in b.js", a);
setTimeout(() => {
console.log("a in b.js", a);
}, 1000);
module.exports = { b };
当执行node a.js
时:
a in b.js is undefined
b in a.js is 12
(node:23352) Warning: Accessing non-existent property 'a' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
a in b.js is undefined
Author 回答者: shfshanyue
@mrrs878 在 b.js 代码示例中有一个拼写错误
Author 回答者: mrrs878
@shfshanyue 感谢老哥指正,已修改