Je suis tombé sur un comportement inattendu en passant une grande valeur de milliseconde à setTimeout()
. Par exemple,
setTimeout(some_callback, Number.MAX_VALUE);
y
setTimeout(some_callback, Infinity);
les deux causent some_callback
pour être exécuté presque immédiatement, comme si j'avais passé 0
au lieu d'un grand nombre comme le délai.
Pourquoi cela se produit-il ?
1 votes
Parce que c'est limité à 32 bits, ce qui est 2 puissance 32. Si vous le calculez, vous obtenez 4294967296. Maintenant, vous avez besoin du premier bit pour décider si c'est un nombre négatif ou positif. On obtient donc 2 puissance 31 et la moitié de 4294967296, soit 2147483648. Mais zéro est un nombre positif, donc 2147483647.