Firefox setTimeout (func, ms) отправка параметров по умолчанию для обратного вызова - PullRequest
2 голосов
/ 21 марта 2011

Мне не удалось узнать больше об этом параметре по умолчанию, с которым я столкнулся, и надеялся, что кто-то может указать объяснение.

В Firefox (в данном случае 3.6), если вы вызываете следующий код:

function test(someVar) {
   console.log('test ' + someVar);
}
setTimeout(test, 0);

Он будет записывать «случайное» число на консоль.Я знаю, что вы можете передавать параметры в Firefox следующим образом:

setTimeout(test, 0, param1, param2);

Но похоже, что Firefox автоматически отправляет значение.Я думаю это количество мс после запрошенного времени вызова, но я не могу быть уверен.(Например: now () + 0ms == now (), но так как он не может вызвать прямо сейчас, он ожидает очередь выполнения и возвращает количество мс после того времени?) Если я установлю 500 мс для времени ожидания, оно обычно возвращает0, если у меня нет долго работающего скрипта.

Я также знаю, что Firefox ограничит запросы на тайм-аут до 10 мс, а установка 0 сделает его по умолчанию 10 мс.Если это значение является «значением задержки» (т. Е. Оно заняло у нас на 126 мс больше, чем вы запрашивали), основано ли оно на вводимом мной значении (0) или фиксированной минуте?


Один из приведенных ниже ответов предлагаетчто это ручка таймера.Следующий код опровергает это (?):

function test(someVar) {
   console.log('test ' + someVar);
}
console.log('Timer ' + setTimeout(test, 0));

Это вернет два разных значения.


Конечно, в IE он вернет undefined, поэтому я неписать код, который ожидает этого, но мне было любопытно.

(Это фактически вызывало ошибку в некотором коде, над которым я работал, который полагался на необязательные параметры для вызывающей функции. Работал в IE, а не в FF.)

Ответы [ 2 ]

5 голосов
/ 21 марта 2011

Из MDC

Геккон передает дополнительный параметр в процедуру обратного вызова, указывая «задержку» тайм-аута в миллисекундах.

Поскольку «фактическая» задержкаможет быть, дольше, чем задержка, указанная в вызове setTimeout, «задержка» будет равна нулю, если функция была вызвана точно после указанной задержки, ненулевое значение в противном случае.

2 голосов
/ 21 марта 2011

Вы правы, что это смещение.Обычно он равен нулю (имеется в виду, что он был вызван, когда должен был быть), но если резервное копирование движка JS будет выше или даже может быть отрицательным.

ссылка: https://developer.mozilla.org/en/DOM/window.setTimeout

(см. Часть желтым цветом)

...