1. ホーム
  2. javascript

[解決済み] なぜsetTimeout()は大きなミリ秒の遅延値に対して "break "するのですか?

2022-08-05 12:27:02

質問

に大きなミリ秒の値を渡すと、予期しない動作に出くわしました。 setTimeout() . 例えば

setTimeout(some_callback, Number.MAX_VALUE);

setTimeout(some_callback, Infinity);

両方の原因 some_callback がほとんど即座に実行され、あたかも私が 0 を渡したかのように、ほとんど即座に実行されます。

なぜこのようなことが起こるのでしょうか?

どのように解決するのですか?

これは、setTimeout が遅延を格納するために 32 ビットの int を使用しているためで、許容される最大値は次のようになります。

2147483647

試しに

2147483648

を実行すると、問題が発生します。

私は、これがJSエンジンの内部例外を何らかの形で発生させ、関数がまったく発生しないのではなく、すぐに発生する原因になっていると推測しているのです。