2010-11-07 2 views
3

Выполняют ли операции async с обратными вызовами размер стека? У меня недостаточно знаний переводчиков javascript или правильных инструментов, чтобы понять это. Мой инструмент goto - это консоль firebug, и это показывает, что размер стека не увеличивается, но я могу смотреть на него неправильно. Так кто-нибудь знает?Размер стека и обратные вызовы в javascript

ответ

5

Асинхронный обратный вызов, как и обратный вызов события, запускается один за другим через цикл событий. Он не вызывается из одного стека вызовов функции, которая помещает его в цикл событий, поскольку каждая функция цикла завершается до того, как будет вызвана следующая. Нет, они не увеличивают размер стека.

4

Я считаю, что все javascript-двигатели в современных браузерах однопоточные, что означает, что обратный вызов не может произойти до тех пор, пока не закончится текущий путь выполнения. Это будет означать, что стек полностью размотан, и обратный вызов будет происходить (по существу) с новым стеком.

Размер стека будет увеличиваться только при вызове функции или объявлении локальной переменной. Когда вы покинете область действия, вызвавшую увеличение, стек снова уменьшится.

Если вас больше интересует использование общей памяти, то это немного сложнее.

Обратные вызовы будут занимать немного памяти до тех пор, пока они не будут выполнены, но механизм javascript должен очистить после себя после завершения обратного вызова. Если вы поместите новые данные в кучу (например, через глобальные переменные), то эта память не будет освобождена, поскольку она будет по-прежнему использоваться после обратного вызова.

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