长春三合一网站建设,网站引用优酷,wordpress jpress,赣州网站建设宏任务微任务一、为什么JS是单线程语言#xff1f;二、JS是单线程#xff0c;怎样执行异步代码#xff1f;1、JS是单线程语言 2、JS代码执行流程#xff0c;同步执行完#xff0c;再进行事件循环#xff08;微任务、宏任务#xff09; 3、清空所有的微任务#xff0c;再…
宏任务微任务一、为什么JS是单线程语言二、JS是单线程怎样执行异步代码1、JS是单线程语言 2、JS代码执行流程同步执行完再进行事件循环微任务、宏任务 3、清空所有的微任务再执行宏任务 4、微任务Promise.then 5、宏任务setTimeout 事件循环微任务、宏任务 向服务器发送的请求、定时器、事件 都会进入事件循环 一、为什么JS是单线程语言 
JS语言的一大特点就是单线程也就是说同一时间只能做一件事那么JS为什么不能有多个线程呢这样能提高效率啊。 
JS的单线程与它的用途有关作为浏览器脚本语言JS的主要用途是与用户互动以及操作DOM这决定了它只能是单线程否则会带来很复杂的同步问题比如假定JS同时有两个线程一个线程在某个DOM节点上添加内容另一个线程删除了这个节点这时浏览器应该以哪个线程为准 
所以为了避免复杂性从一诞生JS就是单线程这已经成为了这门语言的核心特征将来也不会改变。 
二、JS是单线程怎样执行异步代码 
单线程就意味着所有任务需要排队前一个任务结束才会执行后一个任务如果前一个任务耗时很长后一个任务就不得不一直等着。 
消息队列消息队列是一个先进先出的队列它里面存放着各种消息 事件循环事件循环是指主线程重复从消息队列中取消息执行的过程。 
实际上主线程只会做一件事就是从消息队列里取消息执行消息再取消息再执行当消息队列为空时就会等待直到消息队列变成非空而且主线程只有在将当前的消息执行完后才会去取下一个消息这种机制就叫做事件循环机制取一个消息并执行 题目 答案 3 3 3 分析 1、for循环进入同步任务 2、setTimeout进入事件循环 3、先执行同步任务执行完同步执行事件循环 所以 for循环里面的i到3了才开始执行定时器里面的打印三个输出都是3 题目 答案 1 promise 1 2 微1 微2 1 分析 同步任务Promise内部、console.log(2) 微任务Promise.then 宏任务setTimeout 先执行同步去任务 : 1、Promise内部的1 promise 1 2、console.log(2)的2 进入事件循环先执行微任务 Promise.then里面的微1、微2 再执行宏任务 console.log(1): 1