js注意事项4(同步异步)

Posted 嘿起屁儿整

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js注意事项4(同步异步)相关的知识,希望对你有一定的参考价值。

为什么要有同步异步?

  1. JS是单线程的。即一件事情完成后,才能做后续的事情。期间不能进行任何操作
  2. 同步:顺序执行。
  3. 异步:同步全部执行完了再执行。
  4. 异步又分为:宏任务,微任务
  5. 为什么要分同步异步?因为JS是单线程的,一个一个依次执行。举个例子:发请求,网速慢的情况,肯定半天都卡死在这,所以ajax发请求被归为异步。即等那些稳定的同步操作都快速执行完了,再来执行
  6. async await 与 Promise 的作用? 都是优化异步的,作用一样,写法不同。就是因为异步不稳定,怕异步卡住了,所以我们日常代码中发起异步请求都会用他们优化一下。也是避免异步嵌套

前端哪些是异步的?

  1. 定时器(setTimeout、setInterval) ----宏任务
  2. 事件
  3. 异步请求(ajax、axios
  4. 回调函数

异步怎么执行?

  1. 等同步执行完毕,才执行异步。
  2. 异步有对应的队列,也要排队。
  3. 异步先执行微任务,再执行宏任务。

来点例子

首先:声明一下。定时器属于宏任务。

列子1setTimeout(function () {
      console.log(0);
    }, 10);
    setTimeout(function () {
      console.log(1);
    }, 0);
    console.log(2);
    console.log(3);
    console.log(4);:
那么打印顺序?  2 3 4 1 0
显然同步全部执行完了才执行异步 

例子2new Promise((resolve) => {
    console.log('外层宏事件2');
    resolve()
}).then(() => {
    console.log('微事件1');
}).then(()=>{
    console.log('微事件2')
})
console.log('外层宏事件1');
setTimeout(() => {
    //执行后 回调一个宏事件
    console.log('内层宏事件3')
}, 0)
那么打印顺序?
	外层宏事件2
	外层宏事件1
	微事件1
	微事件2
	内层宏事件3

以上是关于js注意事项4(同步异步)的主要内容,如果未能解决你的问题,请参考以下文章

event loop笔记

> 如何将JS代码更换成异步统计代码

JS常见问题总结二

js_ 预解析(js代码如何执行的)

JS同步与异步;

ajax 的同步异步 js 的异步