JavaScript中的“callback”关键字

时间:2015-09-30 19:35:43

标签: 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);
});

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

2 个答案:

答案 0 :(得分:3)

逻辑上的差距,我认为你很难与匿名,无名的功能。曾几何时,所有功能都被命名。所以代码写得像这样:

function MemberProcessingFunction() {
  // etc
}

function AdminProcessingFunction() {
  // etc
}

var loginProcessingFunction;

if (usertype == 'BasicMember') {
  loginProcessingFunction = MemberProcessingFunction;
}
else if (usertype == 'Admin') {
  loginProcessingFunction = AdminProcessingFunction;
}
loginProcessingFunction();

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

var loginProcessingFunction;

if (usertype == 'BasicMember') {
  loginProcessingFunction = function() {
    // etc
  };
}
else if (usertype == 'Admin') {
  loginProcessingFunction = function() {
    // etc
  };
}
loginProcessingFunction();

当您将函数作为参数传递给另一个函数时,这尤其节省了大量时间。通常,这用于"回调" - 您希望运行某些代码的情况,但只有某个不确定定时的函数完成其工作后才会运行。

对于您的顶级函数,callback是第三个参数的名称;它希望这是一个函数,它在调用方法时提供。它不是一个语言关键字 - 如果你做了一个"发现/替换所有" #34;回调"与" batmanvsuperman",它仍然有用。

答案 1 :(得分:1)

'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);
});

它接收第三个函数参数的整个定义。所以基本上你的'回调'参数的值低于

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

要更好地理解函数如何作为参数传递给另一个函数,请查看this answer