阮一峰的ES教程中,module循环加载的例子
http://es6.ruanyifeng.com/#do...模块的循环加载
// a.js如下
import {bar} from './b.js';
console.log('a.js');
console.log(bar);
export let foo = 'foo';
// b.js
import {foo} from './a.js';
console.log('b.js');
console.log(foo);
export let bar = 'bar';
在这个例子中,输出结果为下面所示,教程解释为,a.js
中import {bar} from './b.js'
;之后就去执行b.js
,对b.js
执行完毕后才回来执行a.js
剩下的语句
$ babel-node a.js
b.js
undefined
a.js
bar
但是在接下来的例子中(如下),却是在执行完了a.js
之后再执行的b.js
,请问应该怎么理解这个执行顺序?
// a.js
import {bar} from './b.js';
export function foo() {
console.log('foo');
bar();
console.log('执行完毕');
}
foo();
// b.js
import {foo} from './a.js';
export function bar() {
console.log('bar');
if (Math.random() > 0.5) {
foo();
}
}
输出结果:
$ babel-node a.js
foo
bar
执行完毕
// 执行结果也有可能是
foo
bar
foo
bar
执行完毕
执行完毕