С чем вызывается функция, заданная для setTimeout? - PullRequest
11 голосов
/ 19 февраля 2010

У меня есть такой код:

setTimeout(foo, 600);

Я всегда думал, что foo не принимал никаких аргументов, например:

function foo() { /* bars */ }

Однако делаем следующее:

function foo(a) { alert(a); /* bars */ }

Появилось предупреждение, отображающее -7. Что означает это число?

Ответы [ 2 ]

8 голосов
/ 19 февраля 2010

Это разница во времени (в миллисекундах) от того, когда он был запланирован для его запуска, и когда он фактически работал.

alert(setTimeout(function(a) { alert(a) }, 2000));

Если вы очистите первое предупреждение во времени, вы увидите следующее предупреждениегде-то от -10 до 10. Если вы подождете несколько секунд, вы увидите что-то примерно в то время, когда вы ждали минус 2000.

То же самое можно увидеть и для setInterval.Запустите следующее в Firebug:

setInterval(function(a) { alert(a); }, 2000);

Попробуйте быстро закрыть предупреждение, оно снова будет около 0.Оставьте его открытым - это даст вам большое значение.

Примечание Это на Firefox Mac, где сохранение открытого оповещения остановит обработку Javascript, поэтому таймер не будет работать, пока язакрыть оповещение.Поведение тестов выше может отличаться в других браузерах

3 голосов
/ 19 февраля 2010

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

<script>
var a = setInterval(foo, 125);

console.log(a);

function foo(b) {
 console.log(b);
}
</script>

выдаст кучу нулей, то же самое касается 250, 500, 1000 ... пока

<script>
var a = setInterval(foo, 127);

console.log(a);

function foo(b) {
 console.log(b);
}
</script>

выдаст

 -2
12
-6
8
-10
4
2
0
-2
-4
9
-8
5
3
1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...