SetInterval продолжает вызывать одну и ту же функцию

0

У меня есть эта функция:

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

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

Спасибо за вашу помощь.

  • 0
    @JosiahHester Это не решает проблему. Проблема заключается в том, что setInterval связывает текущее значение original и вызовов, которые когда-либо проходят 2400 мс. Вы только что связали значение original , но увеличили его до original+1 после вызова setInterval , так что результат точно такой же.
  • 0
    Я очень плохо себя чувствую, самый тупой вопрос, который когда-либо задавали. : P В любом случае, спасибо, куча, я должен был это видеть.
Показать ещё 2 комментария
Теги:
setinterval

2 ответа

3
Лучший ответ

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

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

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

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

  • 0
    Я очень плохо себя чувствую, самый тупой вопрос, который когда-либо задавали. : P В любом случае, спасибо, куча, я должен был это видеть.
  • 0
    Но ваш ответ не работает в этом случае: \ Что не так? dumbsearch.com/towerdef.php
Показать ещё 2 комментария
2

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

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

var original = 0,
    cb = function() {
        ('dis' + original).prototype.call(null);
        original++;
        setTimeout(cb, 2400);
    }
cb();
  • 0
    Другой подход. Как это.
  • 0
    нп. лучшее намерение!
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню