在我的javascript代码中,我有以下内容:
function foo(param1) {
setInterval( bar(param1), 3000 );
}
function bar(msg) {
alert(msg);
}
function set() {
foo('hello');
}
在页面加载时我调用set()
,它只提供一次警报消息。为什么它不能像我期望的那样工作。我认为问题在于我传递foo()
函数的参数,但究竟是什么,我无法弄清楚。
如果问题与参数有关,那么可以采用哪种方法来实现所需的结果。
感谢。
答案 0 :(得分:2)
最好的方法是使用closure从您传递给setInterval
的函数中访问参数:
function foo(param1) {
setInterval(function () {
bar(param1);
}, 3000);
}
function bar(msg) {
alert(msg);
}
function set() {
foo('hello');
}
答案 1 :(得分: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');
}
答案 2 :(得分:1)
你需要将一个函数传递给setInterval
,你正在执行一个函数并传递它的返回值(undefined
,因为执行的函数没有返回值)。
尝试使用匿名函数:
function foo(param1) {
setInterval(function () {
bar(param1);
}, 3000);
}
function bar(msg) {
alert(msg);
}
param1
永远不会改变,所以不需要更复杂的东西。 Here's a working example.