2012-08-25 2 views
3

Вызов функции setTimeout возвращает целочисленный идентификатор, так что с этим идентификатором можно вызвать clearTimeout.Что происходит, если используются все идентификаторы setTimeout?

Что произойдет, если setTimeout вызывается больше раз, чем в JavaScript есть целые положительные числа? Есть ли проблема безопасности?

+0

Браузер останавливается. Почему вы спросили smt. как никогда не бывает? – totten

+1

Будет образована черная дыра, и человечество превратится в ничто. Тем не менее, одна рука будет продолжать хлопать. Самое странное. –

+1

Что вы делаете, это рискует этим? – Quentin

ответ

4

Найдено соответствующий код в Chrome:

static int timeoutId() 
{ 
    static int lastUsedTimeoutId = 0; 
    ++lastUsedTimeoutId; 
    // Avoid wraparound going negative on us. 
    if (lastUsedTimeoutId <= 0) 
     lastUsedTimeoutId = 1; 
    return lastUsedTimeoutId; 
} 

Таким образом, Последний идентификатор будет только после того, как 1 никаких положительных целых чисел не осталось.

3

У вас закончится память (или какой-либо другой ресурс) задолго до этого. Javascript-номера - это 64-битные поплавки, которые могут точно представлять целые числа до 2^52, что означает, что требуется 32 петабайта памяти, чтобы даже удерживать столько идентификаторов, не говоря уже о сопутствующих объектах или задачах.

1

На моей 32-битной системе Windows 7 с Chrome 21 вкладка со страницей разбилась после 4295063. Но это была только вкладка. Я закрыл эту вкладку, и все остальное работало нормально.

Опера 12 сценарий работает медленнее и медленнее.

Firefox жалуется, что сценарий занимает много времени.

Вы можете проверить сами: http://jsfiddle.net/some/r58s8/

Смежные вопросы