1.什么是回调函数(callback)呢?
把函数当作一个参数传到另外一个函数中,当需要用这个函数是,再回调运行()这个函数.它作为一个参数传递给其他的代码,其作用是在需要的时候方便调用如
<script>
function summation(n1, n2, callback) {
var sum = n1 + n1;
callback(sum);
}
function log (num) {
console.log(num);
}
add(1, 2, log); //3
</script>
分析:summation(1, 2, log);中,函数log作为一个参数传入到summation函数中,回调函数不会立即调用,而是var sum = n1 + n2运行完之后需要打印输出sum的时候才会调用这个函数。(这个作为参数传递到另外一个函数中,这个作为参数的函数就是回调函数.
2.回调函数有哪些特点?
1.不会立即执行
回调函数作为参数传递给一个函数的时候,传递的只是函数的定义并不会立即执行。和普通的函数一样,回调函数在调用函数数中也要通过()运算符调用才会执行。
2.回调函数是一个闭包
回调函数是一个闭包,也就是说它能访问到其外层定义的变量。
3.执行前类型判断
3.回调函数中this的指向问题
注意在回调函数调用时this的执行上下文并不是回调函数定义时的那个上下文,而是调用它的函数所在的上下文。
<html>
<body>
<div id="div1">我是一个div</div>
</body>
<script>
window.id = "window";
document.getElementById("div1").onclick = function () {
alert(this.id); // 输出:'div1'
var callback = function () {
alert(this.id); // 输出:'window'
};
callback();
};
</script>
</html>
由此可见回调函数会被当做一个普通函数调用 this指向window