размер стека и обратные вызовы в JavaScript - PullRequest
3 голосов
/ 07 ноября 2010

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

Ответы [ 2 ]

5 голосов
/ 07 ноября 2010

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

4 голосов
/ 07 ноября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...