理解javascript

时间:2015-05-21 03:55:09

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

console.log(genericFunction(2,5,sum));
console.log('After calling the genericFUnction call.');

我假设应该打印消息After calling the genericFunction call.,然后在10秒后再打印7的值。你能解释我哪里出错吗?

以下是jsfiddle

1 个答案:

答案 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解释了原因,以及做了什么。