我试图了解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;
}
console.log(genericFunction(2,5,sum));
console.log('After calling the genericFUnction call.');
我假设应该打印消息After calling the genericFunction call.
,然后在10秒后再打印7
的值。你能解释我哪里出错吗?
以下是jsfiddle
答案 0 :(得分:6)
您正在执行callback(arg1, arg2)
时正在呼叫genericFunction
;其结果7
被传递给setTimeout
作为1秒后执行的函数(1000ms不是10秒)。由于7
不是函数,setTimeout
会忽略它;但它会返回一个有效的计时器ID,这就是你得到的结果。
您必须将未执行的功能传递给setTimeout
。您可以执行setTimeout(callback, 1000)
- 但这没有用,因为{1}}将在1s之后调用而不传递任何参数,并且其返回值将被丢弃。所以有用的模式是:
callback
(如果您不使用var timer = setTimeout(function() {
var result = callback(arg1, arg2);
console.log("result is", result);
}, 1000);
,可以不用clearTimeout
位。)
另外,请注意,永远不能从异步执行的函数(例如由var timer =
执行的函数)返回值。 This answer解释了原因,以及做了什么。