JavaScript中的"callback"关键字

use*_*807 8 javascript callback

请帮助理解以下代码:

// define our function with the callback argument

function some_function(arg1, arg2, callback) {
    // this generates a random number between
    // arg1 and arg2

    var my_number = Math.ceil(Math.random() * (arg1 - arg2) + arg2);

    // then we're done, so we'll call the callback and
    // pass our result
    callback(my_number);
}

// call the function
some_function(5, 15, function(num) {
    // this anonymous function will run when the
    // callback is called
    console.log("callback called! " + num);
});
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,回调关键字是什么.这个词的用法是什么.即使没有使用名称回调定义的函数.

Kat*_*314 6

我认为你很难处理的逻辑差距是匿名的、未命名的函数。曾几何时,所有的函数都有名字。所以代码是这样写的:

function MemberProcessingFunction() {
  // etc
}

function AdminProcessingFunction() {
  // etc
}

var loginProcessingFunction;

if (usertype == 'BasicMember') {
  loginProcessingFunction = MemberProcessingFunction;
}
else if (usertype == 'Admin') {
  loginProcessingFunction = AdminProcessingFunction;
}
loginProcessingFunction();
Run Code Online (Sandbox Code Playgroud)

有人认为“这很愚蠢。我只是创建这些函数名称以便在代码中的一个位置使用它们。让我们将它们合并在一起。”

var loginProcessingFunction;

if (usertype == 'BasicMember') {
  loginProcessingFunction = function() {
    // etc
  };
}
else if (usertype == 'Admin') {
  loginProcessingFunction = function() {
    // etc
  };
}
loginProcessingFunction();
Run Code Online (Sandbox Code Playgroud)

当您将一个函数作为参数传递给另一个函数时,这尤其可以节省大量时间。通常,这用于“回调”——您想要运行某些代码的场合,但仅在某个不确定定时的函数完成其工作之后。

对于您的顶级函数,callback是第三个参数的名称;它期望这是一个函数,并在调用该方法时提供它。它不是语言关键字 - 如果您用“batmanvsuperman”对“callback”一词进行“查找/替换全部”,它仍然有效。


小智 2

“callback”是一个作为参数传递给“some_function”方法的函数。然后使用“my_number”参数调用它。

当“some_function”实际被调用时,如下所示

// call the function
some_function(5, 15, function(num) {
    // this anonymous function will run when the
    // callback is called
    console.log("callback called! " + num);
});
Run Code Online (Sandbox Code Playgroud)

它接收第三个函数参数的完整定义。所以基本上你的“回调”参数的值如下

function(num) {
    // this anonymous function will run when the
    // callback is called
    console.log("callback called! " + num);
}
Run Code Online (Sandbox Code Playgroud)

为了更好地理解如何将一个函数作为参数传递给另一个函数,请查看这个答案