【第25题】node模块的循环加载
2020-06-20 本文已影响0人
青天诀
题目描述:
node 环境下,有A、B两个模块,两个模块互相调用,打印的输出结果是什么?
// a.js
exports.x = 'a1';
console.log('a.js ', require('./b.js').x);
exports.x = 'a2';
// b.js
exports.x = 'b1';
console.log('b.js ', require('./a.js').x);
exports.x = 'b2';
// main.js
console.log('main.js ', require('./a.js').x);
console.log('main.js ', require('./b.js').x);
答案解析:
这个题目涉及node模块的缓存知识,第一次加载某个模块时,Node会缓存该模块。以后再加载该模块,就直接从缓存取出该模块的module.exports
属性。
require('./example.js');
require('./example.js').message = "hello";
require('./example.js').message
// "hello"
上面代码中,连续三次使用require
命令,加载同一个模块。第二次加载的时候,为输出的对象添加了一个message
属性。但是第三次加载的时候,这个message
属性依然存在,这就证明require
命令并没有重新加载模块文件,而是输出了缓存。
题目中的输出结果如下:
$ node main.js
b.js a1
a.js b2
main.js a2
main.js b2
运行时,Node返回a.js的不完整版本,后面代码执行,就是取的前面缓存结果了。
关注我
扫一扫 关注我的公众号【前端名狮】,更多精彩内容陪伴你!
【前端名狮】