跳到主要内容

同步和异步的区别是什么?(三座大山之三)

单线程和异步

  • JS 是单线程语言,只能同时做一件事
  • 浏览器和 nodejs 已支持 JS 启动进程,如 Web Worker
  • JS 和 DOM 渲染共用一个线程,因为 JS 可修改 DOM 结构
  • 遇到等待(网络请求,定时任务)不能卡住,所以需要异步
  • 异步通过 callback 函数形式

异步和同步,基于 JS 是单线程语言

  • 异步不会阻塞代码执行
  • 同步会阻塞代码执行
//异步 100 300 200
console.log(100)
setTimeout(()=>{
console.log(200) //异步(callback 回调函数)
})
console.log(300)
//同步100 200 300
console.log(100)
alert(200)
console.log(300)

前端使用异步的场景有哪些?

  • 网络请求,如 ajax 图片加载
  • 定时任务,如 setTimeout

??setTimeout 执行结果

//执行结果 1 3 5 4 2
console.log(1)
setTimeout(function(){
console.log(2)
},1000)
console.log(3)
setTimeout(function(){
console.log(4)
},0)
console.log(5)