2013-12-15 4 views
0

У меня есть эта функция:SetInterval продолжает называть те же функции

original = 0; 
original = original+1; 
setInterval("dis"+original+"();", 2400); 

Но есть проблема, каждый раз, когда его называют это, кажется, вызывая ту же функцию, снова ... Они не называя индивидуума функции.

Благодарим за помощь.

+0

@JosiahHester Это не решает проблему. Проблема в том, что 'setInterval' связывает текущее значение' original' и вызывает его, когда-либо 2400 мс. Вы просто привязали значение 'original', но увеличили его до' original + 1' после вашего вызова 'setInterval', поэтому результат будет таким же. – mc10

+0

Я чувствую себя очень плохо для себя, самый тупой вопрос, который когда-либо задавался. : P В любом случае спасибо кучу, я должен был это увидеть. – user3092778

+0

Это кажется довольно странным образцом. Что делают все эти функции 'dis1',' dis2' и т. Д. И существует ли их неограниченное число? Одна функция, называемая 'dis' и передающая изменяющееся значение' оригинала', будет казаться более понятной, но я не полностью знаю ваш случай использования. –

ответ

3

Вам нужно каждый раз регенерировать имя функции, поскольку setInterval не заботится об этом для вас - он всегда запускает код, который был передан ему, когда он был настроен.

Найдет правильную функцию в глобальном масштабе (window) и назвать его:

original = 0; 
original = original+1; 
setInterval(function(){ 
    window["dis" + original](); 
    original++; 
}, 2400); 

инкремента счетчика также должно быть сделано в setInterval обработчика.

+0

Я чувствую себя очень плохо для себя, самый тупой вопрос, который когда-либо задавался. : P В любом случае спасибо кучу, я должен был это увидеть. – user3092778

+0

Но ваш ответ не работает в этом случае: \ Что случилось? http://dumbsearch.com/towerdef.php – user3092778

+0

Я думаю, проблема в том, что он пытается вызвать 'dis0', но ваши функции пронумерованы из' dis1'. Поэтому добавьте функцию 'dis0' или выполните' original = 1'. –

2

Это связано с тем, что original используется для создания имени функции обратного вызова один раз - и только один раз - для вызова setInterval. Как следует из названия, setInterval устанавливает обратный вызов один раз и продолжает выполнение до тех пор, пока вы не очистите интервал clearInterval.

Если вы хотите изменить метод неоспоримым называется, вы можете попробовать setTimeout, т.е .:

var original = 0, 
    cb = function() { 
     ('dis' + original).prototype.call(null); 
     original++; 
     setTimeout(cb, 2400); 
    } 
cb(); 
+0

Разный подход. Как это. – user3092778

+0

np. лучше намереваться! – jhohlfeld

+0

Я слышал, что они были более контролируемыми, классными, как он используется как петля :) – user3092778

Смежные вопросы