以下功能每5秒显示一次警报:
function foo() { bar="foo"; alert (bar); setTimeout(foo, 5000); } foo();
但是,当我向函数添加参数并从中调用时setTimeout
,它不再等待5秒,它只是无休止地发出警报而没有任何延迟:
function foo(bar) { bar="foo"; alert (bar); setTimeout(foo(bar), 5000); } foo();
为什么这样,我怎样才能在传递参数时延迟遍历函数?
JavaScript认为你想foo(bar)
立即调用然后将其结果传递给setTimeout()
,这不是你的意思.相反,您应该在其中创建一个匿名函数,如下所示:
function foo(bar) { bar = "foo"; alert(bar); setTimeout(function() { foo(bar) }, 5000); }
它不起作用,因为您在使用时调用该函数setTimeout(foo(bar), 5000)
.
您可以使用该.bind()
方法传递bar
变量:
setTimeout(foo.bind(this, bar), 5000);
第一个参数是this
要传递给函数的值.它可以是null
,如果你不需要它.以下参数是传递的参数.在这种情况下,bar
是第一个参数.
您可以使用参数参数(在第二个参数之后):
setTimeout(foo, 5000, bar);
基本上,第二个参数之后的任何参数都传递给第一个参数中提供的函数.