3

関数を呼び出すsetTimeoutと整数 ID が返されるため、そのclearTimeoutID で呼び出すことができます。

setTimeoutJavaScript で正の整数よりも多くの回数呼び出されるとどうなりますか? セキュリティ上の問題はありますか?

4

3 に答える 3

4

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 になります。

于 2012-08-25T22:17:12.613 に答える
3

それが起こるずっと前に、メモリ(または他のリソース)が不足します。Javascript の数値は 64 ビットの浮動小数点数であり、2^52 までの整数を正確に表すことができます。つまり、付随するオブジェクトやタスクは言うまでもなく、それだけ多くの ID を保持するだけでも 32 ペタバイトのメモリが必要になります。

于 2012-08-25T22:15:09.583 に答える
1

Chrome 21 を搭載した 32 ビット Windows 7 システムでは、約 4295063 の後にページのあるタブがクラッシュしました。しかし、それはタブだけでした。そのタブを閉じると、他のすべてが正常に機能していました。

Opera 12 では、スクリプトの実行がますます遅くなります。

Firefox は、スクリプトに時間がかかりすぎると不満を漏らしています。

自分でテストできます: http://jsfiddle.net/some/r58s8/

于 2012-08-25T22:54:40.507 に答える