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)
在上面的代码中,回调关键字是什么.这个词的用法是什么.即使没有使用名称回调定义的函数.
我认为你很难处理的逻辑差距是匿名的、未命名的函数。曾几何时,所有的函数都有名字。所以代码是这样写的:
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)
为了更好地理解如何将一个函数作为参数传递给另一个函数,请查看这个答案。