同步和异步操作的区别就是是否阻碍后续代码的执行。
在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)也不会执行到异步
单线程模型
作者:holdtom
链接:https://www.imooc.com/article/71081
来源:慕课网
单线程模型
作者:holdtom
链接:https://www.imooc.com/article/71081
来源:慕课网