JS运行机制

本文围绕JS运行机制展开,介绍了JS单线程特性,即同一时间只能做一件事,同步程序直接执行,异步程序先挂起。还阐述了任务队列,包括同步队列和异步队列,以及Event Loop的工作原理,最后提及了异步任务开启的几种方式,如setTimeout、DOM事件和Promise。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值