我试图理解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.');
Run Code Online (Sandbox Code Playgroud)
我假设After calling the genericFunction call.应该打印消息,然后在10秒后打印应该打印的值7.你能解释我哪里出错吗?
这是jsfiddle
你正在执行callback(arg1, arg2)当时的电话genericFunction; 它的结果7将被setTimeout作为1秒后执行的函数(1000ms不是10秒).既然7不是一个功能,setTimeout就会忽略它; 但它会返回一个有效的计时器ID,这就是你得到的结果.
您必须将未执行的功能传递给setTimeout.你可以做setTimeout(callback, 1000)- 但这没有用,因为callback在1s之后调用而不传递任何参数,它的返回值将被丢弃.所以有用的模式是这样的:
var timer = setTimeout(function() {
var result = callback(arg1, arg2);
console.log("result is", result);
}, 1000);
Run Code Online (Sandbox Code Playgroud)
(如果你不使用clearTimeout,你可以留下var timer =一点.)
另外,请注意,永远不能从异步执行的函数(例如执行的函数)返回值setTimeout.这个答案解释了为什么,以及做了什么.
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |