Skip to content

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

单线程和异步

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

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

  • 异步不会阻塞代码执行
  • 同步会阻塞代码执行
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 执行结果

js
//执行结果 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);

基于 MIT 许可发布