Фото Энни Спратт на Бессмысленно
Какой стек вызовов JavaScript?
По словам MDN : Стек вызовов – это механизм для интерпретатора (например, интерпретатор JavaScript в веб-браузере), чтобы отслеживать его место в сценарии, который вызывает несколько функций – какая функция в данный момент работает и какие функции вызываются изнутри этой функции, и Т. Д.
На самом базовом уровне стек вызовов – это то, где наш код выполнен, используя контекст выполнения.
Двигатель JavaScript, программа, которая запускает код JavaScript, содержит стек вызовов, так и куча. На данный момент просто знайте, что куча – это большой, неструктурированный пул памяти.
Почему вызов стека важно?
JavaScript один резьбовый или синхронный. Это может сделать только одну вещь за раз. Мы можем дать ему 100 задач для выполнения, но она не может выполнять все 100 задач одновременно. Он должен пройти через процесс завершения одной задачи, прежде чем двигаться на следующий. Это невероятно упорядоченно.
В пределах стека вызовов, например, эти 100 задач – это все функции. Стек вызовов составит контекст выполнения каждой функции друг на друга, в том, что их назывались, как куча книг, или коробок, или кусочки Lego и т. Д. В верхней части кучи – это контекст текущего выполнения, который мы находимся внутри. После того, как этот контекст выполнения завершен работает, он будет удален с верхней части кучи. Книга будет выпущена, и она может двигаться вниз, прямо внизу. И это будет продолжаться, пока весь стек не будет опорожнен, и стек вызовов возвращается в контекст глобального выполнения, пока не вызывается что-то новое.
Но что происходит, когда есть задача в задаче, или вторая функция в другой функции, когда в этом вызове стека? В этом случае, если в функции была вызвана вторая функция, создается новый контекст выполнения и нажимается на верхнюю часть стека. Выполнение этой первой функции приостановлена, выполняется вторая функция, и после того, как она завершена, она выключается с стека вызовов, и мы возвращаемся в контекст выполнения первой функции, который затем продолжается до тех пор, пока не будет И мы возвращаемся в глобальный контекст исполнения.
Хотя он может показаться немного глупым, вот пример того, как работает переключение контекстов выполнения, и продвигается через Call Stack работает.
function first(){
console.log("Inside First.")
function second(){
console.log("First execution context paused, now inside Second.")
function third(){
console.log("Second execution context paused, now inside Third.")
}
third();
console.log("Return to second's execution context.");
}
second();
console.log("Return to first's execution context.");
}
first()
Когда сначала называется, он будет распечатан в консоли:
Inside First. First execution context paused, now inside Second. Second execution context paused, now inside Third. Return into second's execution context. Return to first's execution context.
Каждый раз, когда была названа новая функция, стек вызовов проходил пройти через контекст выполнения до завершения, прежде чем вернуться к предыдущей функции, пока в конце концов, все контексты выполнения были завершены, и мы вернулись в контекст глобального выполнения.
Глобальный контекст выполнения будет выходить из стека вызовов, когда наша программа заканчивается, либо закрывая окно браузера, либо закрывая терминал.
Дальнейшее чтение:
Красноречивый JavaScript Модель параллелизма MDN и контур событий
Оригинал: “https://dev.to/dani8439/the-javascript-call-stack-4ec8”