@@ -475,11 +475,11 @@ CommonJS的一个模块,就是一个脚本文件。`require`命令第一次加
475
475
476
476
以后需要用到这个模块的时候,就会到` exports ` 属性上面取值。即使再次执行` require ` 命令,也不会再次执行该模块,而是到缓存之中取值。也就是说,CommonJS模块无论加载多少次,都只会在第一次加载时运行一次,以后再加载,就返回第一次运行的结果,除非手动清除系统缓存。
477
477
478
- ### CommonJS模块的循环加载
478
+ ### CommonJS 模块的循环加载
479
479
480
- CommonJS模块的重要特性是加载时执行 ,即脚本代码在` require ` 的时候,就会全部执行。一旦出现某个模块被"循环加载",就只输出已经执行的部分,还未执行的部分不会输出。
480
+ CommonJS 模块的重要特性是加载时执行 ,即脚本代码在` require ` 的时候,就会全部执行。一旦出现某个模块被"循环加载",就只输出已经执行的部分,还未执行的部分不会输出。
481
481
482
- 让我们来看,Node[ 官方文档] ( https://nodejs.org/api/modules.html#modules_cycles ) 里面的例子。脚本文件` a.js ` 代码如下。
482
+ 让我们来看,Node [ 官方文档] ( https://nodejs.org/api/modules.html#modules_cycles ) 里面的例子。脚本文件` a.js ` 代码如下。
483
483
484
484
``` javascript
485
485
exports .done = false ;
@@ -556,9 +556,9 @@ exports.bad = function (arg) {
556
556
557
557
上面代码中,如果发生循环加载,` require('a').foo ` 的值很可能后面会被改写,改用` require('a') ` 会更保险一点。
558
558
559
- ### ES6模块的循环加载
559
+ ### ES6 模块的循环加载
560
560
561
- ES6处理 “循环加载”与CommonJS有本质的不同。ES6模块是动态引用,如果使用` import ` 从一个模块加载变量(即` import foo from 'foo' ` ),那些变量不会被缓存,而是成为一个指向被加载模块的引用,需要开发者自己保证,真正取值的时候能够取到值。
561
+ ES6 处理 “循环加载”与CommonJS有本质的不同。ES6模块是动态引用,如果使用` import ` 从一个模块加载变量(即` import foo from 'foo' ` ),那些变量不会被缓存,而是成为一个指向被加载模块的引用,需要开发者自己保证,真正取值的时候能够取到值。
562
562
563
563
请看下面这个例子。
564
564
590
590
591
591
接着,` b.js ` 要打印变量` foo ` ,这时` a.js ` 还没执行完,取不到` foo ` 的值,导致打印出来是` undefined ` 。` b.js ` 执行完,开始执行` a.js ` ,这时就一切正常了。
592
592
593
- 再看一个稍微复杂的例子(摘自 Dr. Axel Rauschmayer 的[ 《Exploring ES6》] ( http://exploringjs.com/es6/ch_modules.html ) )。
593
+ 再看一个稍微复杂的例子(摘自 Axel Rauschmayer 的[ 《Exploring ES6》] ( http://exploringjs.com/es6/ch_modules.html ) )。
594
594
595
595
``` javascript
596
596
// a.js
@@ -612,7 +612,7 @@ export function bar() {
612
612
}
613
613
```
614
614
615
- 按照CommonJS规范 ,上面的代码是没法执行的。` a ` 先加载` b ` ,然后` b ` 又加载` a ` ,这时` a ` 还没有任何执行结果,所以输出结果为` null ` ,即对于` b.js ` 来说,变量` foo ` 的值等于` null ` ,后面的` foo() ` 就会报错。
615
+ 按照 CommonJS 规范 ,上面的代码是没法执行的。` a ` 先加载` b ` ,然后` b ` 又加载` a ` ,这时` a ` 还没有任何执行结果,所以输出结果为` null ` ,即对于` b.js ` 来说,变量` foo ` 的值等于` null ` ,后面的` foo() ` 就会报错。
616
616
617
617
但是,ES6可以执行上面的代码。
618
618
@@ -667,7 +667,7 @@ export function bar() {
667
667
}
668
668
```
669
669
670
- 我们再来看ES6模块加载器 [ SystemJS] ( https://github.com/ModuleLoader/es6-module-loader/blob/master/docs/circular-references-bindings.md ) 给出的一个例子。
670
+ 我们再来看 ES6 模块加载器 [ SystemJS] ( https://github.com/ModuleLoader/es6-module-loader/blob/master/docs/circular-references-bindings.md ) 给出的一个例子。
671
671
672
672
``` javascript
673
673
// even.js
0 commit comments