1

在我的 javascript 代码中,我有以下内容:

function foo(param1) {
    setInterval( bar(param1), 3000 );
}

function bar(msg) {
    alert(msg);
}

function set() {
    foo('hello');
}

在我调用页面加载时set(),它只给出一次警报消息。为什么它不像我预期的那样工作。?我认为问题在于我传递foo()函数的参数,但它到底是什么,我无法弄清楚。

如果问题出在参数上,有什么替代方法可以达到预期的效果。?

谢谢。

4

3 回答 3

2

最好的方法是使用闭包从您传递给的函数访问参数setInterval

function foo(param1) {
    setInterval(function () {
        bar(param1);
    }, 3000);
}

function bar(msg) {
    alert(msg);
}

function set() {
    foo('hello');
}
于 2013-01-16T16:54:23.673 回答
1

您需要将一个函数传递给setInterval,您正在执行一个函数并传递它的返回值(undefined因为执行的函数没有返回值)。

尝试使用匿名函数:

function foo(param1) {
    setInterval(function () {
        bar(param1);
    }, 3000);
}

function bar(msg) {
    alert(msg);
}

param1这里永远不会改变,所以不需要任何更复杂的东西。这是一个工作示例。

于 2013-01-16T16:58:43.820 回答
1

setInterval当您给出调用整个函数的返回值时,需要一个函数。

应该可以工作的修改版本:

var msg = null;

function foo(param1) {
   // When foo is called, its argument is set to msg variable, so the function called 
   // by setInterval will have access to the message that must show in a window.alert
    msg = param1;
    setInterval(bar, 3000 );
}

function bar() {
    alert(msg);
}

function set() {
    foo('hello');
}
于 2013-01-16T16:51:14.213 回答