JS基础--异步

66 阅读1分钟

异步和单线程

什么是异步?

先看一段代码:

console.log(100)
setTimeout(function () {
    console.log(200)
},1000)
console.log(300)
//100,300,1秒后再打印200

上面代码的执行顺序:

  • 执行第一行,打印100
  • 执行setTimeout后,传入setTimeout的函数会被暂存起来,不会立即执行(单线程的特点,不能同时干两件事)
  • 执行最后一行,打印300
  • 待所有程序执行完后,处于空闲状态时,会立马查看有没有暂存起来的要执行
  • 发现暂存起来的setTimeout中的函数后,无需等待,立即执行

同步

console.log(100)
alert(200)
console.log(300)
//100,弹出200,用户确认之后再打印300

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

  • 同步会阻塞代码执行,而异步不会
  • alert是同步,setTimeout是异步

何时需要异步?

  • 在可能发生等待的情况
  • 等待过程中不能像alert一样阻塞程序运行
  • 因此,所有的“等待情况”都需要异步

前端使用异步的场景

  • 定时任务:setTimeout, setInverval
  • 网络请求:ajax请求,动态转存失败,建议直接上传图片文件加载
  • 事件绑定