回调函数是一段可执行的代码段,它作为一个参数传递给其他的代码,其作用是在需要的时候方便调用这段(回调函数)代码。
回调函数
1
2
3
4
5
6
7
8
9
10
11
12
|
function
addSqua(num1, num2, callback){
var
sum = num1 + num2;
return
callback(sum);
}
function
squa(num){
return
num*num;
}
let num = addSqua(1, 2, squa);
console.log(num);
//=>9
|
匿名回调函数
将匿名函数直接作为函数参数传递给函数, 这也是我们编程一般采用的
1
2
3
4
5
6
7
8
9
|
function
addSqua(num1, num2, callback){
var
sum = num1 + num2;
return
callback(sum);
}
let num = addSqua(1, 2,
function
squa(num){
return
num*num;
});
console.log(num);
//=9
|
模仿数组中的every方法
在Array.prototype中添加类似与every一样的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
Array.prototype.myEvery =
function
(callback) {
if
(
typeof
callback ===
'function'
) {
for
(let i = 0; i <
this
.length; i++) {
if
(callback(
this
[i])) {
return
false
;
}
}
return
true
;
}
return
true
;
}
let op = [3, 6,
'every'
, 9,
'each'
];
op.myEvery(
function
(value) {
console.log(value);
})
// 3
// 6
// 'every'
// 9
// 'each'
|
回调函数特点
- 不会立刻执行, 正如定义中给出的一样回调函数作为代码片段可以根据需要在其特定条件下执行, 回调函数作为参数传递给一个函数的时候,传递的只是函数的定义并不会立即执行。
- this,ES6推出了箭头函数, 箭头函数的推出需要在写回调函数的时候格外注意, this 是指向所在函数的上下文对象, 如果在在ES6采用箭头函数则需要注意 this使用, 箭头函数中this并没有上下文关系直说, 有兴趣的可以查看ES6 阮一峰, 再次奉上传送门
回调函数的优点和使用场景是个闭包
回调函数是闭包的简单使用,也就是说它能访问到其外层定义的变量。