事件循环

164 阅读1分钟
function f1 () { console.log('f1'); };function f2 () {  console.log('f2');  f1();};function f3 () { console.log('f3'); };function f4 () {  console.log('f4');  f3();};function f5 () {  console.log('f5');  setTimeout(f4, 0);};function start () {  f2();  f5();  console.log('start end');}start();



1.start入执行栈,执行

2.f2入栈,f2执行,输出 'f2'

3.f1入栈,f1执行,输出 'f1'

4.f1执行完毕,f1出栈

5.f2执行完毕,f2出栈

6.f5入栈,f5执行,输出 'f5'

7.setTimeout回调函数加入事件队列

8.f5执行完毕,f5出栈

9.start执行完毕, 输出 'start end', start出栈

10.执行栈为空,检查事件队列,将setTimeout事件压入执行栈,f4入栈

11.f4入栈,f4执行,输出 'f4'

12.f3入栈,f3执行,输出 'f3'

13.f3执行完毕,f3出栈

14.f4执行完毕,f4出栈, 执行栈为空,事件队列为空,结束


执行输出结果为:

f2

f1

f5

start end

f4

f3