js的同步与异步(setInteral和setTimeout)
1.javascript引擎是单线程的--JavaScript引擎同一时间只执行一条代码,所以每一个JavaScript代码执行块会 “阻塞”其它异步事件的执行
2.异步事件:鼠标点击,计时器被触发,或者Ajax异步请求
3.这些事件的回调函数将排在执行队 列的最后等待执行,等待下一次恰当的时间再执行(实际上,排队的方式根据浏览器的不同而不同,所以这里只是一个简化)
4.setInterval不会考虑当前正在执行什么,而把所有的堵塞的函数排到队列尾部。这意味着两次setInterval回调函数之间的时间间隔会被牺牲掉(缩减)
5.当没有任何程序等待JavaScript引擎执行,javascript代码块就不会阻塞异步的回调函数,会依次立即执行队列里排好的一个个函数。
总结:单线程的javascript引擎一次只会做一件事,同步的执行javascript代码块时,时不时会触发异步操作,就回将异步的回调函数一个个按照先后顺序放进队列去等待执行,由于队列是先进先出后进后出的,所以当同步的javascript代码块执行完成后,就会执行顺序队列中的操作。如果定时器被正在执行的代码阻塞了,它将会进入队列的尾部去等待执行下一次可能执行的时间出现,有可能超过它设定的延迟时间.
aaaaa
网友评论