回调函数(callback)
什么是回调函数
概念:
当一个函数作为参数传入另一个函数中,并且它不会立即执行,只有当满足一定条件后该函数才可以执行,这种函数就称为回调函数
- 把A函数当作一个参数传到B函数中,当需要使用B函数时,在回调运行A函数
- 理解:把函数当作参数传给另一个函数中,称为回调函数
//定义一个A函数
function a(num) {
console.log(num);
}
//定义一个B函数
function b(num1,num2,callback) {
var num = num1+num2;
callback(num);//调用了a函数,实现了打印num值的方法
}
//调用B函数
b(10,20,a)//将a函数作为b函数的第三个参数,这里调用a函数的时候,不用加(),不然会报错
//最后的结果为
30//将10+20的结果值打印出来
特点
- 不会立即执行
-
- 回调函数作为参数传递给一个函数的时候,传递的只是函数的定义并不会立即执行。和普通的函数一样,回调函数在调用函数数中也要通过()运算符调用才会执行
- 回调函数是一个闭包
-
- 回调函数是一个闭包,也就是说它能访问到其外层定义的变量。
- 上面函数b中的callback方法时,就是将num值作为参数传递给callback方法的
- 回调函数调用时this的执行上下文并不是回调函数定义时的那个上下文,而是调用它的函数所在的上下文
为什么要用到回调函数
- javascript是时间驱动的语言,javascript不会因为要等待一个响应而停止当前的运行,而是在监听其他事件时继续执行
function first() {
console.log(1);
}
function second() {
console.log(2);
}
first();//1,这个先执行
second();//2,这个后执行
最后的结果为 1 2
//将上面的函数小小的改动
function first() {
// 模拟代码延迟
setTimeout(function () { //所以function(){console.log(1)}是回调函数
console.log(1);
}, 500);
}
function second() {
console.log(2);
}
first();//1,这个后执行
second();//2,这个先执行
最后的结果为 2 1
//而是 JavaScript 在继续向下执行 second() 之前没有等待 first() 响应的问题。
//回调正是确保一段代码执行完毕之后再执行另一段代码的方式。