JavaScript 既有同步执行模式,也有异步执行模式,它们的主要区别体现在代码执行顺序和处理耗时操作的方式上:
1. 同步(Synchronous)
- 执行方式:代码按照书写顺序依次执行,前一行代码执行完成后,才会执行下一行。
- 特点:
- 阻塞性:如果某行代码执行时间长(如复杂计算),会阻塞后续代码运行。
- 顺序执行:代码执行顺序与书写顺序一致,易于理解。
- 示例:
javascript
console.log("开始");
let sum = 0;
for (let i = 0; i < 1000000000; i++) {sum += i; // 耗时操作,会阻塞后续代码
}
console.log("计算结果:", sum);
console.log("结束"); // 必须等待上面的循环完成后才会执行
2. 异步(Asynchronous)
- 执行方式:代码不按照书写顺序执行,耗时操作会被放入 "任务队列",主线程继续执行后续代码,待耗时操作完成后再回头执行回调函数。
- 特点:
- 非阻塞性:耗时操作(如网络请求、定时器)不会阻塞主线程。
- 无序性:异步操作的结果返回时间不确定,需要通过回调函数、Promise 等方式处理。
- 示例:
javascript
console.log("开始");
setTimeout(() => {console.log("定时器执行"); // 异步操作,放入任务队列
}, 1000);
console.log("结束"); // 无需等待定时器,会先执行
核心区别总结
特性 | 同步 | 异步 |
执行顺序 | 按代码顺序依次执行 | 不按顺序,依赖操作完成时间 |
阻塞性 | 会阻塞后续代码 | 不会阻塞,非阻塞执行 |
适用场景 | 简单计算、立即执行的操作 | 网络请求、文件 IO、定时器等耗时操作 |
处理方式 | 直接执行 | 通过回调、Promise、async/await 处理结果 |