Почему setInterval вызывает функцию со случайными аргументами? - PullRequest
3 голосов
/ 17 сентября 2008

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

// 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.

Ответы [ 3 ]

4 голосов
/ 17 сентября 2008

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

хочешь

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

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

3 голосов
/ 17 сентября 2008

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

1 голос
/ 17 сентября 2008

var cycleId = setInterval (cycleCharts, 10000, 4242);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...