Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript SetInterval继续调用相同的函数_Javascript_Jquery_Setinterval - Fatal编程技术网

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中的作用域,这确实帮助我理解了很多”