Skip to content

CommonJS循环加载 #199

Open
Open
@TieMuZhen

Description

@TieMuZhen

题目

a.jsb.jsc.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 模块的循环加载

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions