JavaScript 带你从不同的角度认识回调函数

315 阅读2分钟

回调函数定义

A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.

demo

将一个函数的定义作为另一个函数的实参。

function fn(param, callback){
    callback(param)
}
fn('XiaoMing'function f(param){
    console.log('Hello ' + param);
})

上文已经描述了JavaScript中的回调函数。读者可能会感觉很荒唐,因为上面的描述可以用正确的废话来形容。


从零认识它

回调函数本质上仍是函数调用函数,回调函数在调用的形式上是作为另一个函数的参数进行调用的。

常用的调用函数的方式

function f1(){
    return 1;
}
function f2(){
    return f1();
}

上面的代码展示了在函数f2中调用函数f1。

我们在生产实践中很少写这样的函数,因为f2在调用f1的过程是" 呆板 "的,只能按部就班返回1。实际上我们需要根据用户的数据决定返回值。于是我们这样改造函数。

function f1(param){
    return 1 + param;
}
function f2(param){
    return f1(param);
}

上面的函数能够根据用户的输入,返回一个加一后的值。

这样一来程序就具有了灵活性,在之前的基础上扩展了应用范围,能够根据用户的输入,输出不同的值。

但是即使如此,能够适应我们实际的生产吗?上面的函数的处理过程是固定的,如下图所示:

                                                                  图片.png

如果有这样一个需求:用户输入一个整型数组,需要我们使用不同的算法进行排序。接下来我们有两种处理方式:

图片.png

在方式一中我们针对每种处理都要考虑完整的流程,但是方式二中只要求操作可扩展就行了。

上面我们通过设置形参的方式将固定输出转化为灵活输出。接下来我们也通过设置形参的方式将固定处理转化为灵活处理。这就是回调函数存在的意义。

function f2(param, callback){
    return callback(param);
}
// 在调用f2的时候将f1作为形参,这样一来我们的操作也就灵活化了。
f2(2function f1(param){
    return param + 1;
})

上面的代码就是回调函数的应用,增加了程序的可扩展性。