Javascript SetInterval继续调用相同的函数
我有这个功能:Javascript SetInterval继续调用相同的函数,javascript,jquery,setinterval,Javascript,Jquery,Setinterval,我有这个功能: original = 0; original = original+1; setInterval("dis"+original+"();", 2400); 但有一个问题,每次调用它时,它似乎都在重复调用同一个函数。。。它们不是调用单个函数 谢谢您的帮助。每次都需要重新生成函数名,因为setInterval不会为您处理这些问题-它总是运行设置时传递给它的代码 这将在全局范围(窗口)中找到正确的函数并调用它: original = 0; original = original+1;
original = 0;
original = original+1;
setInterval("dis"+original+"();", 2400);
但有一个问题,每次调用它时,它似乎都在重复调用同一个函数。。。它们不是调用单个函数
谢谢您的帮助。每次都需要重新生成函数名,因为setInterval不会为您处理这些问题-它总是运行设置时传递给它的代码 这将在全局范围(
窗口
)中找到正确的函数并调用它:
original = 0;
original = original+1;
setInterval(function(){
window["dis" + original]();
original++;
}, 2400);
增加计数器也需要在setInterval处理程序中完成。每次都需要重新生成函数名,因为setInterval不会为您处理这个问题-它总是运行设置时传递给它的代码 这将在全局范围(
窗口
)中找到正确的函数并调用它:
original = 0;
original = original+1;
setInterval(function(){
window["dis" + original]();
original++;
}, 2400);
还需要在setInterval处理程序中增加计数器。这是因为
original
用于构造回调函数名一次,并且仅一次,以调用setInterval
。顾名思义,setInterval
设置回调一次,并继续执行,直到用clearInterval
清除该间隔
如果要更改调用的方法,可以尝试setTimeout
,即:
var original = 0,
cb = function() {
('dis' + original).prototype.call(null);
original++;
setTimeout(cb, 2400);
}
cb();
这是因为
original
被用于构造回调函数名一次,而且仅一次,以调用setInterval
。顾名思义,setInterval
设置回调一次,并继续执行,直到用clearInterval
清除该间隔
如果要更改调用的方法,可以尝试setTimeout
,即:
var original = 0,
cb = function() {
('dis' + original).prototype.call(null);
original++;
setTimeout(cb, 2400);
}
cb();
@约西亚赫斯特没有解决这个问题。问题在于
setInterval
绑定original
的当前值,并在2400ms过去的任何时候调用。您刚刚绑定了original
的值,但在调用setInterval
后将其增加到original+1
,因此结果完全相同。我真的为自己感到难过,这是我问过的最愚蠢的问题P无论如何,谢谢你,我应该看到的。这似乎是一个相当奇怪的模式。所有这些dis1
、dis2
等函数都做什么?它们的数量是否不受限制?拥有一个名为dis
的函数,并将original
的变化值传递给它似乎更有意义,但我并不完全了解您的用例。没错,我应该这样做:P@go-oleg@JosiahHester这并不能解决问题。问题在于setInterval
绑定original
的当前值,并在2400ms过去的任何时候调用。您刚刚绑定了original
的值,但在调用setInterval
后将其增加到original+1
,因此结果完全相同。我真的为自己感到难过,这是我问过的最愚蠢的问题P无论如何,谢谢你,我应该看到的。这似乎是一个相当奇怪的模式。所有这些dis1
、dis2
等函数都做什么?它们的数量是否不受限制?拥有一个名为dis
的函数,并将original
的变化值传递给它似乎更有意义,但我并不完全了解您的用例。没错,我应该这样做:P@go olegI对我自己感到非常难过,这是有史以来最愚蠢的问题P无论如何,谢谢你,我应该看到的。但是你的答案在这种情况下不起作用:\怎么了?我认为问题在于它试图调用dis0
,但您的函数是从dis1
编号的。因此,添加一个dis0
函数或执行original=1
.dang,这很容易。修正了它,将original++放在setinterval的边缘:)谢谢我为自己感到很难过,这是我问过的最愚蠢的问题P无论如何,谢谢你,我应该看到的。但是你的答案在这种情况下不起作用:\怎么了?我认为问题在于它试图调用dis0
,但您的函数是从dis1
编号的。因此,添加一个dis0
函数或执行original=1
.dang,这很容易。通过将original++置于setinterval:)thanksDifferent方法的边缘,修复了此问题。就像那样。我以前听说它们更容易控制,很酷它是如何像循环一样使用的:)但是它不起作用,不管是@matt的答案还是你的:\sry。问题是如何获得所需的函数——可以使用eval(例如)。然而,有些人认为它是邪恶的。因此,您可以将函数隐藏在一个对象中,并在其回答中使用window对象引用@Matt这样的对象。您需要显式地在一个对象上设置函数:即window['dis0']=function(){//do stuff},并像这样调用它:window['dis0'])。提示:阅读javascript中的作用域,这确实帮助我理解了很多“不同的方法。就像那样。我以前听说它们更可控,很酷它是如何像循环一样使用的:),但它不起作用,不管是@matt的答案还是你的:\sry。问题是如何获得所需的函数——可以使用eval(例如)但是,有些人认为它是邪恶的。因此,你可以在一个对象中隐藏你的函数,并用窗口对象来引用这个对象,比如@ Matt。你需要在一个对象上显式地设置你的函数:即窗口['DIS0'] =函数(){//dots},并调用它如下:窗口[DIS0]().提示:阅读javascript中的作用域,这确实帮助我理解了很多”