◆ タイマーのネストレベルが 5 を超えると 4ms 未満は 4ms に引き上げられる
◆ 4ms になっても 4ms 以内に実行なんて現実的に無理なのであんまり意味なさそう

たまに見かける setTimeout に指定するミリ秒
4 ms

なぜ 4 なんて中途半端な値? と思う人もいるかもしれませんが仕様で最低が 4 ms なので 0 にしても 4 になるので 4 を指定しています
最速でという意味なら引き上げられるにしても 0 でいいように思いますが 意味あるのかもしれません

0 を設定しても 最低が 4 ms というのはたまに見かけるので知っていましたが 深く調べたことはなかったので調べてみました


whatwg の最新の仕様
https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers

If nesting level is greater than 5, and timeout is less than 4, then set timeout to 4.

4ms になるのは 「ネストレベルが 5 より大きいときのみ」 みたいですね
さっと見た感じネストレベルは setTimeout の中でさらに setTimeout を設定したら増えていく タイマーのネストのことのようです
setTimeout と setInterval の区別はないようです


setInterval を setTimeout で再帰的に実装したら 途中からは 0ms が 4ms になるということです
途中から遅くならず一定のペースのために 4ms を設定している……ようにも見えますけど 4ms 以内に実行されることなんてことまずありえないです
個人で持たないレベルの超ハイスペックな PC なら可能性はあるかもしれませんが 気にする必要はないんじゃないかと思います


ところで 昔の仕様も見つけたので見てみると ちょっと変わっていました
https://www.w3.org/TR/2011/WD-html5-20110525/timers.html#dom-windowtimers-settimeout

ネストレベルというものはなくて setTimeout の中で呼び出され場合は常に 4 ms に引き上げられるようです
また setInterval は別扱いでこっちは 10 ms まで引き上げられるようです

結局 Working Draft のときだけで Recommendation になるときには今と同じネストレベルが使われるようになりましたが 2013 年のドラフトまではネストレベルなし 2014 年のドラフトからネストレベルありになっていました
IE11 がリリースされたのは 2013 年なので比較的最近のほうです
古い動きをしていても違いがわからないですが IE11 だともしかすると古い方だったりするのかもしれません