ES6 module循环加载时的执行顺序问题

阮一峰的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.jsimport {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
执行完毕
执行完毕
阅读 4.7k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题