js是单线程执行,js是操作dom,由于是单线程,只要有一处问题,就会中断执行;
为了解决单线程的这个弊端,出现了同步和异步两个概念,
同步执行:前一个任务执行完了,才能执行后一个任务,一旦有问题,就会终止执行。
js代码基本都是同步执行
异步执行:前一个任务执行时花费时间过长,无需等待,执行下一个任务,这是异步,异步再执行过程中,依次排到任务队列中,等主线程执行完毕,依次执行。
异步执行有事件,定时器,资源请求才是异步。
由于定时器是异步执行,定时器不会准确的定时执行,主线程执行的时候,依次排到任务队列中,等主线程执行完毕,依次执行,所以会有5ms左右的延迟。主线程执行的过程中,异步执行等会执行,只是里面的callback会去排队提交。
SetTimeout等主线程结束后开始计时,达到计时时间就提交任务,onclick只有触发这个事件就提交任务。
定时器例子:
for(var i=0;i<5;i++){
var t=setTimeout (function(){
console.1og(i)
clearTimeout(t)
},1000)
}
画图分析:
原文:https://www.cnblogs.com/lichaochao/p/12423787.html