1.如何理解JS的单线程

输出结果为:1,2,3
JS是从上到下执行的
JS是单线程的,即在同一时间只能做一件事情
遇到同步程序,直接执行;
遇到异步程序,先挂起,等同步程序执行完毕后再执行
2.什么是任务队列
同步队列:优先级最高
异步队列:遇到异步队列先挂起,等同步队列执行完后,再选择执行异步队列的某个
setTimeout中的时间间隔如果小于4mss,也按4ms计算

输出A
都是同步任务,while会无限循环,B不会执行

输出:A
因为SetTimeout为异步任务,在同步任务没有执行完之前是不会被执行的,而while的条件始终成立,故同步任务陷入循环,异步任务一直等待

输出:4,4,4,4
浏览器有个timer模块,主要处理setTimeout和setInterval的,是在定时器到了那个时间才会把定时器放到异步队列中,异步队列等待事件循环(Event Loop)来执行
因为for为同步任务,会执行setTimeout,setTimeout为异步任务
3.什么是Event Loop

1.运行栈运行的都是同步任务
2.任务队列中放异步任务
3.当运行栈中的同步任务都执行完毕后,会把满足条件的放入运行栈中,执行
console.log("A");
setTimeout(function(){
console.log("C");
},0);
cobnsole.log("B");
首先会把console.log("A")和console.log("B")放入运行栈中执行,执行完后,如果setTimeout事件到了,则会把setTimeout异步任务放到任务队列中;
当运行栈中的同步任务执行完毕后,就会从任务队列中取setTimeout的同步任务进行执行,执行完毕后,继续从任务队列中拿任务,有则执行,如此循环就形成了Event Loop
4.异步任务的开启
setTimeout和setInterval
DOM事件
ES6中的Promise
本文围绕JS运行机制展开,介绍了JS单线程特性,即同一时间只能做一件事,同步程序直接执行,异步程序先挂起。还阐述了任务队列,包括同步队列和异步队列,以及Event Loop的工作原理,最后提及了异步任务开启的几种方式,如setTimeout、DOM事件和Promise。

被折叠的 条评论
为什么被折叠?



