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