関数を呼び出すsetTimeout
と整数 ID が返されるため、そのclearTimeout
ID で呼び出すことができます。
setTimeout
JavaScript で正の整数よりも多くの回数呼び出されるとどうなりますか? セキュリティ上の問題はありますか?
関数を呼び出すsetTimeout
と整数 ID が返されるため、そのclearTimeout
ID で呼び出すことができます。
setTimeout
JavaScript で正の整数よりも多くの回数呼び出されるとどうなりますか? セキュリティ上の問題はありますか?
Chrome で関連するコードを見つけました:
static int timeoutId()
{
static int lastUsedTimeoutId = 0;
++lastUsedTimeoutId;
// Avoid wraparound going negative on us.
if (lastUsedTimeoutId <= 0)
lastUsedTimeoutId = 1;
return lastUsedTimeoutId;
}
したがって、正の整数がなくなると、Last ID は 1 になります。
それが起こるずっと前に、メモリ(または他のリソース)が不足します。Javascript の数値は 64 ビットの浮動小数点数であり、2^52 までの整数を正確に表すことができます。つまり、付随するオブジェクトやタスクは言うまでもなく、それだけ多くの ID を保持するだけでも 32 ペタバイトのメモリが必要になります。
Chrome 21 を搭載した 32 ビット Windows 7 システムでは、約 4295063 の後にページのあるタブがクラッシュしました。しかし、それはタブだけでした。そのタブを閉じると、他のすべてが正常に機能していました。
Opera 12 では、スクリプトの実行がますます遅くなります。
Firefox は、スクリプトに時間がかかりすぎると不満を漏らしています。
自分でテストできます: http://jsfiddle.net/some/r58s8/