Почему setInterval вызывает функцию со случайными аргументами?

StackOverflow https://stackoverflow.com/questions/86269

  •  01-07-2019
  •  | 
  •  

Вопрос

Итак, я сталкиваюсь с любопытной проблемой.Если у меня есть функция

// counter wraps around to beginning eventually, omitted for clarity.
var counter; 
cycleCharts(chartId) {
    // chartId should be undefined when called from setInterval
    console.log('chartId: ' + chartId);
    if(typeof chartId == 'undefined' || chartId < 0) {
        next = counter++;
    }
    else {
        next = chartId;
    }
    // ... do stuff to display the next chart
}

Эта функция может быть вызвана явно действием пользователя, и в этом случае chartId передается в качестве аргумента, и отображается выбранная диаграмма;или он может находиться в режиме автозапуска, и в этом случае он вызывается setInterval который инициализируется следующим образом:

var cycleId = setInterval(cycleCharts, 10000);

Самое странное, что я действительно вижу cycleCharts() получить chartId аргумент, даже если он вызывается из setInterval!Тот Самый setInterval даже не имеет никаких параметров для передачи в cycleCharts функция, так что я очень озадачен тем, почему chartId не является неопределенным, когда cycleCharts вызывается из setInterval.

Это было полезно?

Решение

setInterval загружает в cycleCharts фактические временные данные ( так что можно вычислить фактическое время его выполнения и использовать для получения менее высокопарного ответа, в основном практичного в анимации)

ты хочешь

 var cycleId = setInterval(function(){ cycleCharts(); }, 10000); 

(это поведение может быть не стандартизировано, поэтому не полагайтесь на него слишком сильно)

Другие советы

Он сообщает вам, на сколько миллисекунд задерживается обратный вызов.

var cycleId = setInterval(цикловые диаграммы, 10000, 4242);

Начиная с третьего параметра и далее - они передаются в функцию, поэтому в моем примере вы отправляете 4242 в качестве идентификатора диаграммы.Я знаю, что это может быть не ответ на поставленный вами вопрос, но это может быть решением вашей проблемы?Я думаю, что значение, которое он получает, является просто случайным из всего, что находится в стеке во время передачи / вызова метода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top