Open
Description
题目
有
a.js
、b.js
、c.js
三个文件如下,求执行node a.js
输出结果
a.js
代码如下
const b = require('./b.js');
console.log(exports.x);
exports.x = 'x';
require('./c.js');
b.js
代码如下
const a = require('./a.js');
console.log(a);
console.log(a.x);
a.x='y';
c.js
代码如下
const a = require('./a.js');
console.log(a.x);
输出结果如下
{}
undefined
y
x
原理
CommonJS中的做法是,一旦某个模块被”循环引用“,也就是这个模块没有加载完,就进入了循环,所以原则是,只exports
已经执行的那部分,没执行的不输出。
详细原理请阅读阮一峰大佬的JavaScript 模块的循环加载