什么是回调函数CallBack

解释一,通俗易懂:
一般写程序是你调用系统的API,如果把关系反过来,你写一个函数,让系统调用你的函数,那就是回调了,那个被系统调用的函数就是回调函数。

解释二,通俗易懂:
一般一个函数调用另一个函数,被调用的函数是出现在方法体当中,而回调函数比较特殊,它是出现在参数列表当中.也就是说,当调用的时候,需要从其他地方拿到这个(回调)函数,以参数的形式传入.

解释三,看完较具体地理解了的回答:
回调函数叫callback function,其实更好的定义是"call after" function。

让我用人话解释一下,回调函数是一个函数,将会在另一个函数完成执行后立即执行。回调函数是一个作为参数传给另一个 JavaScript 函数的函数,这个回调函数会在传给的函数内部执行。

引用Stack Overflow上面一个比较好的说明:

A callback function is a function which is:accessible by another
function, and is invoked after the first function if that first
function completes

下面举两个例子就能很清晰了:

function greeting(name) {
    
    
  alert('Hello ' + name);
}
 
function processUserInput(callback) {
    
    
  var name = prompt('请输入你的名字。');
  callback(name);
}
 
processUserInput(greeting);

以上范例为 同步 回调,它是立即执行的。

然而需要注意的是,回调函数经常被用于继续执行一个异步完成后的操作,它们被称为异步回调。

另一个例子:

// A function which accepts another function as an argument
// (and will automatically invoke that function when it completes - note that there is no explicit call to callbackFunction)
function printANumber(number, callbackFunction) {
    
    
    console.log("The number you provided is: " + number);
    setTimeout(function() {
    
     callbackFunction(); }, 3000); 
    console.log("second");
}
 
// a function which we will use in a driver function as a callback function
function printFinishMessage() {
    
    
    console.log("I have finished printing numbers.");
}
 
// Driver method
 
printANumber(6, printFinishMessage);

执行printANumber函数后,结果:

> "The number you provided is: 6"
> "second"
> "I have finished printing numbers."

可以看到先输出"The number you provided is: 6",“second”,延时三秒后输出"I have finished printing numbers."

所以我们可以认为callbackFunction的实际执行是在主函数体printANumber的方法体执行完才执行。

这对我们意义非常重大,例如我们在一个网页有关的函数中调用外部API,我们肯定需要异步执行,然后传入回调函数,如果是同步执行,是阻塞的,我们需要等待调用API结果之后才能执行后面的函数,这样可能会造成界面加载卡顿、延时的情况发生,而使用回调函数异步执行,则不影响我们后面函数的执行,是非阻塞的。

猜你喜欢

转载自blog.csdn.net/nikyae/article/details/111239334