На първо място, тази история се основава на Стивън Къртис -33 Основи, които всеки разработчик на Javascript трябва да знае, и можете да я прочетете тук.
Мислех, че е страхотно да знаете концепциите, въпреки че не е изискване. Затова реших да науча и обясня тези концепции една по една.

#1. Стек за повиквания

Това, което ще научим днес, е Стек за повиквания.
JavaScript е език за програмиране с една нишка, което означава, че има един стек за повиквания. Следователно може да прави едно нещо наведнъж.
Нека видим примера по-долу.

function first(){
  // [1]
  second()
  // [2]
}
function second(){
  // [3]
  console.log('I love medium')
}
first();

Кодът по-горе ще бъде изпълнен по следния начин:

Списък със стека на повикванията: празен

  1. Игнорирайте всички функции, докато не бъде извикана функцията first().
  2. first() функцията е извикана.
  3. Добавете функцията first() към списъка със стека на повикванията.

Списък със стека на повикванията:
first()

3. Изпълнете [1] вътре във функцията first().

4. Функцията second() се извиква.

5. Добавете функцията second() в горната част на списъка със стека на повикванията.

Списък със стека на повикванията:
second()
first()

6. Изпълнете [3] вътре във функцията second().

7. В конзолата се записва „I love media“.

8. Премахнете функцията second() от списъка със стека на повикванията.

Списък със стека на повикванията:
first()

8. Изпълнете [2] вътре във функцията first().

9. Премахнете first() function от списъка със стека на повикванията.

Списък със стека на повикванията: празен

Започваме с празен стек за повиквания. Всеки път, когато извикаме функция, тя автоматично се добавя към стека за извикване. След като се изпълнят всички редове код във функцията, тя се премахва от стека за повиквания.

Можете да видите, че следите на стека се конструират, когато се хвърля изключение. Разгледайте кода по-долу

function first() {
  second();
}
function second() {
  third();
}
function third() {
  throw new Error('error');
}
first();

Да приемем, че този код се изпълнява от app.js
Съобщението за грешка казва, че грешката е възникнала при third(), което се изпълнява от second(), което се изпълнява от first(), което се изпълнява от app.js
Показва ви списък със стека на повикванията когато е възникнала грешка.

Заключение

Интерпретаторът на Javascript записва списъка със задачи, за да изпълни всички редове от вашия код.
По-високият приоритет е написан отгоре.
Изпълнете плана им един по един отгоре и го премахнете, когато е готово.

справка :
Как работи JavaScript: преглед на двигателя, времето за изпълнение и стека за извикване — Александър Златков
MDN