Я столкнулся с некоторым неожиданным поведением, когда передача большой миллисекунды оценивает setTimeout()
. Например,
setTimeout(some_callback, Number.MAX_VALUE);
и
setTimeout(some_callback, Infinity);
обе причины some_callback
быть выполненным почти сразу, как будто я передал 0
вместо большого количества как задержка.
Почему это происходит?
Это происходит из-за того, что setTimeout использует 32-битное int для хранения задержки, поэтому максимальное допустимое значение будет
2147483647
, если вы попробуете
2147483648
, вы получите свою проблему.
Я могу только предположить, что это вызывает некоторую форму внутреннего исключения в JS Engine и вызывает немедленное срабатывание функции, а не вовсе.
Number.MAX_VALUE
на самом деле не является целым числом. Максимально допустимое значение для setTimeout, вероятно, 2 ^ 31 или 2 ^ 32. Попробуйте
parseInt(Number.MAX_VALUE)
, и вы получите 1 обратно вместо 1,7976931348623157e + 308.