理解javascript中的回调函数
我试图理解Javascript中的回调功能。请找到下面我写的代码理解javascript中的回调函数,javascript,Javascript,我试图理解Javascript中的回调功能。请找到下面我写的代码 var genericFunction=function(arg1, arg2, callback){ var result=setTimeout(callback(arg1, arg2), 1000); console.log('Result >> '+result) return result; } var sum=function(arg1, arg2){ return arg1+arg2; }
var genericFunction=function(arg1, arg2, callback){
var result=setTimeout(callback(arg1, arg2), 1000);
console.log('Result >> '+result)
return result;
}
var sum=function(arg1, arg2){
return arg1+arg2;
}
console.log(genericFunction(2,5,sum));
console.log('After calling the genericFUnction call.');
我假设在调用genericFunction调用。后应打印消息,然后在10秒后打印7
的值。你能解释一下我错在哪里吗
这是您在执行常规函数
时调用的回调(arg1,arg2)
;它的结果7
被传递给setTimeout
,作为1秒后执行的函数(1000ms不是10s)。由于7
不是一个函数,setTimeout
将忽略它;但它将返回一个有效的计时器ID,这就是您得到的结果
必须将未执行的函数传递到setTimeout
。您可以执行setTimeout(callback,1000)
——但这没有用,因为callback
将在1s后调用,而不会传递任何参数,其返回值将被丢弃。因此,有用的模式是:
var timer = setTimeout(function() {
var result = callback(arg1, arg2);
console.log("result is", result);
}, 1000);
(如果不使用clearTimeout
,则可以禁用var timer=
位。)
另外,请注意,您永远不能从异步执行的函数(例如由setTimeout
执行的函数)返回值。解释原因和替代方法。在执行常规函数时,您正在调用回调(arg1,arg2)
;它的结果7
被传递给setTimeout
,作为1秒后执行的函数(1000ms不是10s)。由于7
不是一个函数,setTimeout
将忽略它;但它将返回一个有效的计时器ID,这就是您得到的结果
必须将未执行的函数传递到setTimeout
。您可以执行setTimeout(callback,1000)
——但这没有用,因为callback
将在1s后调用,而不会传递任何参数,其返回值将被丢弃。因此,有用的模式是:
var timer = setTimeout(function() {
var result = callback(arg1, arg2);
console.log("result is", result);
}, 1000);
(如果不使用clearTimeout
,则可以禁用var timer=
位。)
另外,请注意,您永远不能从异步执行的函数(例如由setTimeout
执行的函数)返回值。解释原因以及改为执行的操作。Result被分配setTimeout。Result被分配setTimeout。