Javascript е синхронен, еднонишков език, което означава, че JavaScript може да изпълнява една команда наведнъж в определен ред (преминава на следващия ред само след като текущият ред бъде изпълнен).

Всичко в JavaScript се случва в контекст на изпълнение. Всеки път, когато пишем програма на javascript, се създава контекст на глобално изпълнение, който има две фази или можем да кажем два компонента, компонент на кода и компонент на паметта, който също е известен като Променлива среда. Фаза I е създаване на памет (разпределяне на памет за всички променливи и функции в глобалното пространство) и във фаза II, която също се нарича нишка на изпълнение, кодът се изпълнява ред по ред, например, разгледайте следния код

Така че в компонента на паметта във Фаза I от горната таблица можем да видим, че паметта е разпределена за променливите, които съхраняват специална ключова дума Undefined, и съдържанието във функцията се копира, както е в паметта , И всичко това се случва дори преди изпълнението на кода

И чрез това можем да разберем и ПОВДИГАНЕ, което означава поради тази фаза I на контекста на изпълнението, т.е. разпределяне на памет към променливи и функция, преди изпълнение

Имаме достъп до променливите и функцията, преди да ги инициализираме и това също прави JAVASCRIPT специален

Фаза II (Изпълнение на кода)-:

1.вар. n= 2

след изпълнение на този undefined в променливата среда се заменя с 2, както можете да видите в таблицата

2. функция square(num){

var ans = num* num;

връщане ans;

}

Паметта вече е дадена за функциониране, така че изпълнението ще игнорира това

3. var square2 = square(n);

Сега в JavaScript всеки път, когато се извика функция, се формира нов контекст на изпълнение и контролите преминават от глобалния контекст на изпълнение към този контекст на изпълнение, който се поддържа от CALL STACK, за който ще говорим по-късно,

От таблицата можем да видим, че в новия контекст на изпълнение отново ще има две фази

Паметта се дава на променливите num и ans и двете като недефинирани сега, когато изпълняваме допълнително n = 2, така че num е 2 и след това num*num равно на 4, което замества недефинираното от ans, сега след изявлението за връщане контролите се връщат към глобален контекст на изпълнение, където оставихме, означава на линия квадрат 2 и стойността square2 също се заменя с 4.

След завършване на функцията този контекст на изпълнение се изтрива

4. var square4 = square(4);

Отново се създава контекст на изпълнение, когато се извика тази функция square4

Паметта се дава на променливите num и ans и двете като недефинирани сега, когато изпълняваме допълнително n = 4, така че num е 4 и след това num*num е равно на 16, което замества недефинираното от ans, сега след оператор за връщане контролите се връщат обратно към глобалния контекст на изпълнение и стойността square4 също се заменя с 16. След завършване на функцията този контекст на изпълнение се изтрива.

И когато цялата програма приключи, целият глобален контекст на изпълнение се изтрива, нека разберем това чрезСтека на повикванията

СТЕК ЗА ОБАЖДАНЕ

„Call Stack поддържа реда на изпълнение на контекста на изпълнение“

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

Тук GEC е глобалният контекст на изпълнение, който се създава автоматично при стартиране на програмата, а E1 тук представлява контекст на изпълнение, който се създава, когато извикаме функцията square2 и след завършване се изтрива от стека за повиквания

И по подобен начин, E2 се появи, когато беше извикан квадрат 4 и изскочи след завършването

И накрая, когато цялата програма се изпълни, GEC също се изтрива и стекът за повиквания става празен.

Друго име за стека за повиквания

  1. Стек на контекста на изпълнение
  2. Програмен стек
  3. Контролен стек
  4. Стек по време на изпълнение
  5. Машинен стек.