2018-07-27 Require JS 特性
2018-07-27 本文已影响4人
Ethan_zyc
Require JS 特性
- module 被执行的时候加载,加载用会留下缓存,供之后使用
- 一旦出现某个模块被循环使用(A 模块中调用了 B,B 中又调用了 A),就输出已经执行的部分,还未执行的部分不会输出。
我们来看个例子:
这是 module A:modA
module.exports.test = 'A';
const modB = require('./modB');
console.log('modA:', modB.test);
module.exports.test = 'AA';
这是 module B:modB
module.exports.test = 'B';
const modA = require('./modA');
console.log('modB:', modA.test);
module.exports.test = 'BB';
这是等会要执行的 js 文件:main.js
const modA = require('./modA');
const modB = require('./modB');
我们不看结果先来分析一下:
- 显示调用了
modA
,modA
中先输出了 test 为 'A',然后去调用了modB
,modB
中先输出 test 为' B',这时又调用了modA
,这时说明modA
被循环使用了,所以剩下的不会再输出,只会输出已经已经执行的,所以接下来输出modB
中的 console,modA.test
还是 A,又输出modB
中的 test 为 BB。 - main.js 中执行第二句,调用
modB
,因为有缓存,所以modB
的test
还是 BB。 - 结果为:
modB: A
modA: BB
ps:不难发现,使用了循环调用会让代码变得很复杂,并且不容易找 bug,如果你忽略了这点的话,所以,我们还是尽量避免这样的情况发生。