--- title: Call stack slug: Словарь/Call_stack tags: - Glossary translation_of: Glossary/Call_stack ---

Стек вызовов(call stack) - это механизм для интерпретаторов (таких как интерпретатор JavaScript в веб-браузере) для отслеживания текущего местонахождения интерпретатора в скрипте, который вызывает  несколько функций типа {{glossary("function","functions")}}, — какая из функций выполняется на данный момент, какие функции вызываются изнутри этой (выполняемой) функции, какая будет вызвана следующей и т. д.

Пример

 

function greeting() {
   // [1] Some codes here
   sayHi();
   // [2] Some codes here
}
function sayHi() {
   return "Hi!";
}

// Invoke the `greeting` function
greeting();

// [3] Some codes here

Код выше будет выполнен следующим образом:

  1. Игнорирование всех функций, пока не будет достигнуто место вызова функции greeting().
  2. Вызывается функция greeting().
  3. Функция "greeting" помещается в очередь стека вызовов.

Очередь стека вызовов:
- greeting

 

  1. Выполняется код внутри функции `greeting`.
  2. Вызывается функция sayHi().
  3. Функция sayHi() помещается в очередь стека вызовов.

Очередь стека вызовов:
- greeting
- sayHi

  1. Выполняется весь код внутри функции sayHi() до самого конца.
  2. Возврат выполнения кода  с места вызова функции sayHi() и продолжение выполнения оставшегося кода функции greeting().
  3. Выполненная функция sayHi() удаляется из очереди стека вызовов.

    Очередь стека вызовов:
    - greeting

  4. Когда весь код внутри функции greeting() выполнен, происходит возврат выполнения оставшейся части основного скрипта JS с места вызова функции greeting().
  5. Выполненная функция greeting() удаляется из очереди стека вызовов.

    Очередь стека вызовов:
    ПУСТО

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

Узнать больше

Общие знания