Почему делает setTimeout (), “повреждаются” для больших значений задержки миллисекунды?

Я столкнулся с некоторым неожиданным поведением, когда передача большой миллисекунды оценивает setTimeout(). Например,

setTimeout(some_callback, Number.MAX_VALUE);

и

setTimeout(some_callback, Infinity);

обе причины some_callback быть выполненным почти сразу, как будто я передал 0 вместо большого количества как задержка.

Почему это происходит?

95
задан Matt Ball 12 August 2010 в 14:13
поделиться

2 ответа

Это происходит из-за того, что setTimeout использует 32-битное int для хранения задержки, поэтому максимальное допустимое значение будет

2147483647

, если вы попробуете

2147483648

, вы получите свою проблему.

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

131
ответ дан 24 November 2019 в 05:50
поделиться
Number.MAX_VALUE

на самом деле не является целым числом. Максимально допустимое значение для setTimeout, вероятно, 2 ^ 31 или 2 ^ 32. Попробуйте

parseInt(Number.MAX_VALUE) 

, и вы получите 1 обратно вместо 1,7976931348623157e + 308.

-2
ответ дан 24 November 2019 в 05:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: