这篇文章我们来了解和简单的分析一下浏览器和 node 环境中的 event loop(事件循环)
有些小伙伴可能听说过 eventloop 这个名词, 但是没有了解过, 接下来我们就来了解一下
我们先来看一组代码
来猜一下执行结果
我们来捋一下代码的执行肯定是由上自下而我们这里有两个定时器 setTimeout, 所以我们第一次执行的结果肯定是在控制台打印出 1->2->5, 这个应该是毋庸置疑的, 然后呢开始执行我们的 setTimeout
这里需要注意一下这两个 setTimeout 肯定也是先后顺序执行的, 我们应该知道在浏览器的执行过程中如果不写 setTimeout 的第二个参数那么这个 setTimeout 的延时大约是 4ms(毫秒)(我记得好像是).
所以当我们依次 console 出 125 之后我们的 setTimeout 执行, 控制台会打印 3->4
那么问题就来了, 为什么会输出 3->4? 为什么不是 3-6-4-7 或者 3-4-7-6??
留个悬念我们直接来看这段代码的运行结果
node 环境
浏览器环境
我们可以看到上面的代码不管是 node 环境还是浏览器环境下输出的结果是相同的, 都是 1-2-5-3-4-6-7.
我们来分析一下, 当代码执行完 console 之后, 先调用了第一个 setTimeout 然后调用了第二个 setTimeout
在之后又调用了第一个 setTimeout 中的 setTimeout 最后执行的是第二个 setTimeout 中的 setTimeout
别急, 我们再来看一组代码
我们来看下面的代码
来猜一下执行结果
我们再来捋一捋
首先我们应该肯定的是先打印 1 然后第一个 setTimeout 中打印出 2 这应该是肯定的
然后问题又来了我们知道 Promise 是一个异步的方法对吧那这里应该是先打印 Promise 中的 then 方法中的 log 还是下一个 setTimeout 中的 log 呢?
我们分别来看一下, 代码在 node 环境和浏览器环境下的执行结果
node 环境
浏览器环境
来源: http://www.jianshu.com/p/9114ccb5d593