setTimeout异步

同步和异步操作的区别就是是否阻碍后续代码的执行。

在setTimeout的执行形式上来看,setTimeout是不会阻碍其后续代码的执行的。所以可以理解为setTimeout是异步操作。

单线程模式

 

setTimeout和setInterval的运行机制是,将指定的代码移出本次执行,等到下一轮Event Loop时,再检查是否到了指定时间。如果到了,就执行对应的代码;如果不到,就等到再下一轮Event Loop时重新判断。这意味着,setTimeout指定的代码,必须等到本次执行的所有代码都执行完,才会执行。

setTimeout的作用是将代码推迟到指定时间执行,如果指定时间为0,即setTimeout(f,0),那么不会立刻执行

setTimeout(f,0)将第二个参数设为0,作用是让f在现有的任务(脚本的同步任务和“任务队列”中已有的事件)一结束就立刻执行。也就是说,setTimeout(f,0)的作用是,尽可能早地执行指定的任务。

var a = 1;
setTimeout(function(){
    a = 2;    
    console.log(a);
}, 0);
var a ;
console.log(a);
a = 3;
console.log(a);//输出//1//3//2
//因为先执行同步代码
var flag = true;
setTimeout(function(){
    flag = false;
},0)
while(flag){

}
console.log(flag);
//什么都不会输出,而且浏览器会出现卡死状态
//因为先执行同步代码,所以相当于一直在做while(true){}的无限循环。因此不会输出console.log(flag)也不会执行到异步
转载自:https://www.imooc.com/article/71081

单线程模型

作者:holdtom
链接:https://www.imooc.com/article/71081
来源:慕课网
单线程模型

作者:holdtom
链接:https://www.imooc.com/article/71081
来源:慕课网

猜你喜欢

转载自www.cnblogs.com/ceceliahappycoding/p/10772351.html
今日推荐