У меня есть эта функция:
original = 0;
original = original+1;
setInterval("dis"+original+"();", 2400);
Но есть проблема, каждый раз, когда она называется, она снова вызывает одну и ту же функцию... Они не вызывают отдельные функции.
Спасибо за вашу помощь.
Вам нужно каждый раз обновлять имя функции, поскольку setInterval не заботится об этом для вас - он всегда запускает код, который был передан ему, когда он был настроен.
Это найдет правильную функцию в глобальной области (window
) и вызовет ее:
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();
setInterval
связывает текущее значениеoriginal
и вызовов, которые когда-либо проходят 2400 мс. Вы только что связали значениеoriginal
, но увеличили его доoriginal+1
после вызоваsetInterval
, так что результат точно такой же.