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

IT技术 javascript callback
2021-03-02 14:55:32

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

例如,这将按预期工作:

var callBack = function() { ... }
window.setTimeout( callBack, 1000 );

但这会不小心调用callBack

var callBack = function(param1, param2) { ... }
window.setTimeout( callBack('foo','bar'), 1000 );
2个回答

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

var callBack = function(param1, param2) { ... }
window.setTimeout( function(){callBack('foo','bar');}, 1000 );
这里不需要匿名函数 - 它只会使代码变得混乱。settimeout 函数支持将参数传递给它的回调——那么为什么不使用它呢?
2021-04-23 14:55:32
@Lix 我确定我在某处见过它,例如 http://stackoverflow.com/questions/8641047/passing-callback-parameters-to-settimeout-does-not-work-in-ie
2021-04-23 14:55:32
@Lix 两种方式都可以接受,但是将参数传递给我认为在 ie 中不支持的回调。
2021-04-25 14:55:32
@Lix 尽管如此,我很高兴发布了这个答案,因为它显示了一个更通用的解决方案,当采用回调的函数也没有采用 cb 的参数时,该解决方案有效。现在只bind()缺少(待提,不多) :)
2021-05-11 14:55:32
@Mörre 既然你提到了bind:) ,http://stackoverflow.com/questions/12451844/settimeout-with-arguments
2021-05-20 14:55:32

传递参数的方法是时间参数如在后说明的文档settimeout()

var timer = window.setTimeout( func, delay, [ param1, param2, ... ]

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

因此,对于您的示例,它将类似于:

window.setTimeout( callBack, 1000, [ "foo", "bar" ] );

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


有关如何将参数传递给回调对象的更通用的解释,您可以查看这篇文章:JavaScript:将参数传递给回调函数

你的例子不太正确。文档中的方括号仅用于表示额外参数是可选的。您应该将它们排除在示例之外,否则它将传递一个参数,该参数是一个包含两个参数的数组。
2021-04-25 14:55:32