同步和异步的区别是什么?(三座大山之三)
单线程和异步
- 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);