Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解javascript中的回调函数_Javascript - Fatal编程技术网

理解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; }

我试图理解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.');
我假设在调用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。