2018-07-27 Require JS 特性

Require JS 特性

  1. module 被执行的时候加载,加载用会留下缓存,供之后使用
  2. 一旦出现某个模块被循环使用(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');

我们不看结果先来分析一下:

  1. 显示调用了modAmodA中先输出了 test 为 'A',然后去调用了modBmodB 中先输出 test 为' B',这时又调用了modA,这时说明 modA被循环使用了,所以剩下的不会再输出,只会输出已经已经执行的,所以接下来输出modB中的 console,modA.test还是 A,又输出modB中的 test 为 BB。
  2. main.js 中执行第二句,调用modB,因为有缓存,所以modBtest还是 BB。
  3. 结果为:
modB: A
modA: BB

ps:不难发现,使用了循环调用会让代码变得很复杂,并且不容易找 bug,如果你忽略了这点的话,所以,我们还是尽量避免这样的情况发生。

你可能感兴趣的:(2018-07-27 Require JS 特性)