如何使用参数setTimeout调用javascript函数

如何使用参数setTimeout调用javascript函数,javascript,Javascript,以下功能每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();

以下功能每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();

为什么会出现这种情况?在传递参数时,我如何延迟循环函数?

它不起作用,因为您在使用
setTimeout(foo(bar),5000)
时调用函数

您可以使用传递
变量:

setTimeout(foo.bind(this, bar), 5000);

第一个参数是要传递给函数的
的值。如果您不需要它,它可以是
null
。以下参数是传递的参数。在本例中,
bar
是第一个参数。

JavaScript认为您希望立即调用
foo(bar)
,然后将其结果传递到
setTimeout()
,这不是您的意思。相反,您应该创建一个匿名函数,其中包含您的调用,如下所示:

function foo(bar) {
    bar = "foo";
    alert(bar);

    setTimeout(function() {
        foo(bar)
    }, 5000);
}

您可以使用参数参数(在第二个参数之后):

基本上,第二个参数之后的任何参数都会传递给第一个参数中提供的函数。

可能重复的
foo(bar)
不是函数。您已经调用了一个函数,根据定义,无论return语句是否存在,该函数都会返回一些内容。
setTimeout(foo, 5000, bar);