同步和异步的区别是什么?

同步和异步的区别是什么?

场景题:12345以什么顺序打印出来?定时器的应用
在这里插入图片描述
知识点:

  1. 单线程和异步
  2. 应用场景
  3. Callback hell(回调地狱) 和 Promise(解决回调地狱的问题)

单线程和异步:

  1. JS是单线程语言,只能同时做一件事儿 (例子:做一个ajax请求去加载资源,或者说弄一个定时器,先等待1秒钟后干嘛,如果按照单线程这个只能同时做一件事儿,那么它在这个事情中,它就卡住了,卡住的话鼠标点不了,js不执行。这就是同时做一件事,这就是js单线程的本质。)
  2. 浏览器和node.js已支持JS启动进程,如Web Worker
  3. Js和DOM渲染共用同一个线程,因为JS可修改DOM结构
一、	遇到等待(网络请求,定时任务)不能卡住
二、	需要异步(解决单线程等待的问题)
三、	异步基于callback函数形式来调用的

在这里插入图片描述

异步 核心代码演示:

//异步 (callback 回调)
console.log(100)
setTimeout(() => {
    console.log(200)
},1000)
console.log(300)

效果:
在这里插入图片描述
什么叫异步呢?就是说

先打印100,遇到setTimeOut就先记下,1秒钟后再执行,先不管它,到时候执行再说,程序会立马向下执行,立马等于300,打印了300之后,整个的程序执行完成,然后发现异步任务中还有一个任务,就是一个函数

() => {
console.log(200)
},1000)

一秒钟之后执行,那一秒钟之后就执行刚才说的打印这个200,所以说异步是通过callback的形式去调用的。callback就是回调,就是说回调函数,这个就是回调函数

() => {
console.log(200)
},1000)

也就是说,每个异步都需要加个回调函数,回调函数的意思就是说:我们先去执行同步任务(不是异步的任务),执行完之后,到一个时间,比如上面是触发时间1秒,我们再去执行回调函数,这就是异步。

异步的特点是:它不会阻塞后面代码的执行

同步 核心代码演示:

//同步
console.log(100)
alert(200)
console.log(300)

效果:
在这里插入图片描述
点击OK后
在这里插入图片描述
同步:在alert(200)的时候,它就卡住了,也就是像我们刚才描述的那样,如果是同步的话,它会在运行的过程中卡住,后面的程序不会执行,浏览器也不会渲染,然后js代码也不会执行,这就是同步。

异步和同步总结:

  1. 基于JS是单线程语言
  2. 异步不会阻塞代码执行
  3. 同步会阻塞代码执行

猜你喜欢

转载自blog.csdn.net/weixin_43352901/article/details/107553694