普通函数是从上到下执行的,而异步函数执行完成的时间是不可控的,但是想在他执行完的时候处理结果怎么办?使用回调函数,异步任务的回调函数会在这个异步任务执行完的时候进行调用,进行处理异步任务的数据。
所以说普遍的异步任务都会有一个回调函数,进行数据的处理。
<script>
console.log('主线程开始');
// 使用延时函数产生异步
// 将一个函数作为异步函数的参数,待异步执行完毕时调用
function demo(func){
setTimeout(()=>{
let result = 0;
for (let i = 0; i < 100000000; i++){
// your code
result = i;
}
console.log('循环执行完毕,执行异步回调函数');
func(result);
}, 2000);
}
demo((result)=>{
console.log('循环结果 : ' + result);
});
console.log('优先与上面的循环执行');
</script>
上面的示例将一个异步过程封装为一个函数( demo ),并将一个函数作为 demo 函数的参数,在异步函数循环执行完毕后执行的函数就叫做回调函数。
是不是很熟悉? 在很多地方我们都会用到异步回调函数( 如 ajax 异步请求 )。