同步与异步
同步:
- 同步任务按照顺序逐个执行,每个任务在前一个任务完成后才会开始执行。执行同步任务时,程序会阻塞等待任务完成后再继续执行下一个任务。
异步:
- 异步任务在提交后不会立即执行,而是继续执行后续的任务。异步任务会在后台或其他线程中执行,并在完成后通知主线程或回调函数。在异步任务执行期间,主线程可以继续执行其他任务而无需等待异步任务完成。
回调函数
- 把一个函数作为参数传入到另外一个函数中,那么这个函数就叫做回调函数。如:定时器 防抖节流,事件绑定中的函数都是回调函数。
- 回调函数有同步执行的,也有异步执行的。同步的回调不需要等待。
同步的回调-示例:
const arr = [1, 2, 3]
arr.forEach(function(el){
console.log(el)
})
异步的回调-示例:
setTimeout(() => {
console.log(2)
}, 1000);
案例:
console.log(1)
setTimeout(() => {
console.log(2)
}, 1000);
console.log(3)
- 输出结果为 1 、 3 、 2
- 先执行同步的代码,执行完之后,再去看异步的
console.log(1)
setTimeout(() => {
console.log(2)
}, 1000);
setTimeout(() => {
console.log(4)
}, 0);
console.log(3)
- 输出结果为 1 、 3 、 4 、 2
- 同步代码执行完成后,执行异步代码时,先将
setTimeout挂着、然后代码的延迟时间到达后将代码放入队列中。