js运行机制

1、
console.log(1);
setTimeout(function(){
    console.log(2);
},0)
console.log(3)
打印顺序:132

为什么是1,3,2

js是单线程,同一时间只能做一件事,setTimeout是个异步任务,异步任务要挂起,放到任务队列,不立即执行,等同步任务处理完之后,再去处理异步任务



2、
console.log('A');
while(true){

}
console.log('B');
打印出:A
因为一直在循环,同步任务一直在执行,一直没执行到B

 

3、
console.log('A');
setTimeout(function(){
    console.log(2);
},0)
while(true){}
因为while这个同步任务一直没执行完,执行不到异步队列

 

4、
for(var i=0; i<4; i++) {
  setTimeout(function(){
    console.log(i)
  },1000)
}
打印出:4 4 4 4
因为for循环是个同步任务,遇到setTimeout,这个时间是1000,定时器会记住这个语句,但是他并没有去执行,i就+1了,这个时候还没有执行,交给了定时器了,for循环执行完了,到时间了,定时器会把这个setTimeout扔到异步队列中,这个时候就开始执行了。

 

 
5、什么是EventLoop(事件循环)
一开始浏览器遇到setTimeout,然后交给了定时器,定时器先自己留着,然后等同步任务执行完后,这个setTiemout扔到了异步任务,然后按顺序放到运行栈中执行,运行栈执行完,再去拿异步任务,这个不断循环的过程,就是eventloop(事件循环)






posted @ 2019-01-04 07:00  wzndkj  阅读(156)  评论(0编辑  收藏  举报