前言
JavaScript是运行于单线程的环境中的,而定时器仅仅只是计划代码在未来的某个时间执行。浏览器负责进行排序,指派某段代码在某个时间点运行的优先级
可以把JavaScript想象成在时间线上运行的。 当页面载入时,首先执行的是任何包含在
<script>
元素中的代码。在这之后,JavaScript进程将等待更多代码执行。当进程空闲的时候,下一个代码会被触发并立刻执行。除了主JavaScript执行进程外,还有一个需要在进程下一次空闲时执行的代码队列。随着页面在其生命周期中的推移,代码会按照执行顺序添加入队列。在JavaScript中没有任何代码是立刻执行的,但一旦进程空闲则尽快执行
定时器对队列的工作方式是,当特定时间过去后将代码插入队列中,而不是何时实际执行代码。
Firefox中定时器的实现还能让你确定定时器过了多久才执行,这需传递一个实际执行的时间与指定的间隔的差值。
setTimeout(function(diff){ if(diff>0){ //晚调用 } else if(diff<0>){ //早调用 } else{ //调用及时 } },250);
执行完一套代码后,JavaScript进程返回一段很短的时间,