Javascript:如何将参数传递给回调函数

eme*_*his 8 javascript callback

我很难理解如何正确地将参数传递给回调函数而不立即调用该函数.

例如,这将按预期工作:

var callBack = function() { ... }
window.setTimeout( callBack, 1000 );
Run Code Online (Sandbox Code Playgroud)

但这会不小心打电话callBack:

var callBack = function(param1, param2) { ... }
window.setTimeout( callBack('foo','bar'), 1000 );
Run Code Online (Sandbox Code Playgroud)

mel*_*elc 8

您可以按如下方式调用它,

var callBack = function(param1, param2) { ... }
window.setTimeout( function(){callBack('foo','bar');}, 1000 );
Run Code Online (Sandbox Code Playgroud)

  • @Lix两种方式都是可以接受的,但是我认为在if中不支持将参数传递给回调. (2认同)

Lix*_*Lix 8

传递参数的方法是在时间参数之后,如文档中所述settimeout().

var timer = window.setTimeout( func, delay, [ param1, param2, ... ]
Run Code Online (Sandbox Code Playgroud)

第一个参数是实际的回调,第二个参数是以毫秒为单位的时间,最后一个(可选)参数是传递给回调的参数数组.

所以,对于你的例子,它将是这样的:

window.setTimeout( callBack, 1000, [ "foo", "bar" ] );
Run Code Online (Sandbox Code Playgroud)

您的问题标题略有误导,因为用于将参数传递给回调函数的方法在使用它的代码的实现方面有所不同.正如您可能想象的那样,实际的函数对象及其参数不一定需要一起传递,因为函数执行被推迟到以后的时间; 只有这样才能使参数与回调接触.


有关如何将参数传递给回调对象的更一般性说明,您可以查看以下文章:JavaScript:将参数传递给回调函数.