异步和单线程
什么是异步?
先看一段代码:
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请求,动态
加载
- 事件绑定