JAVASCRIPT中的回调函数

什么是回调函数?

把一个函数当作实参传递给函数的形参变量(获取传递给函数,通过arguments获取),再另外一个函数中把传递的函数执行这种机制就叫回调函数机制

凡是在某一个函数的某一个阶段需要完成某一件事(而这件事是不确定的),都可以利用回调函数机制,把需要处理的事情当作值传递进来

1
2
3
4
5
6
7
8
9
function fn(num, callback){
// callback 传递进来的回调函数
typeof callback === 'function' ? callback() : null;
// callback && callback(); 这种方式默认没有上面的严谨
}
fn(10);
fn(20, function(){
// 此处的匿名函数就是给callback传递的值
})

既然我们已经把函数作为值传递给FN了,此时在FN中我们可以操作传递的函数

  1. 我们可以在FN中把回调函数执行0-N次
  2. 我们还可以给回调函数传递参数值
  3. 我们还可以把回调函数中的this进行修改
  4. 我们还可以接收回调函数执行返回的值
  5. …..
1
2
3
4
5
6
7
8
9
//=> 需求:执行fn可以实现任意数求和,把求出的和传递给回调函数
function fn(callback){
var argNumAry = Array.prototype.slice.call(arguments, 1),
total = eval(argNumAry.join('+'));
typeof callback === 'function' ? callback.call(fn, total) : null;
}
fn(function(result){
console.log(result, this); // 100 fn
}, 10,20,30,40);

很多的方法都是依托于回调函数来完成的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var ary = [12, 23, 34];
ary.sort(function(a, b){
//=> a:当前项
//=> b:后一项
return a-b; //=> 返回一个大于零的值,则a和b位置交换
});
ary.forEach(function(item, index, input){
//=> item:当前便利的这一项
//=> index:当前便利这一项的索引
//=> input:原始便利的数组
//=> forEach每当循环便到数组中的每一项都会把当前传递的回调函数执行一次(不仅执行,还把便利的这一项的值传递给回调函数)
});
//=> map遍历数组中的每一项,原有数组不变,返回结果是修改后的新数组(map相对于forEach来说,增加了对原有想的修改)
ary.map(function(item, index, input){
//=> item:当前便利的这一项
//=> index:当前便利这一项的索引
//=> input:原始便利的数组
return item*10; //=> 回调函数中返回的是啥,详单与把当前便利的这一项改为啥(回调函数中不屑return,默认返回的是undefined)
});