контекст выполнения - это место, где ваш код javascript фактически выполняется, а стек вызовов - это коллекция вашего контекста выполнения, которая работает в LIFO (последний в первом способом).
Вышеупомянутые слова кажутся книжным определением, давайте углубимся в них с помощью некоторых практических примеров.
Контекст выполнения:
Код прост:
x присваивается значение 10;
объявление функции продукта;
в-третьих, вызвать product()
и присвоить результат;
Что происходит за кулисами в javascript, как механизм javascript выполняет следующий код ?? .. 🍴 Когда javascript выполняет вышеуказанный сценарий, он создает контекст выполнения t, и каждый контекст выполнения имеет две фазы:
- Этап создания:
- Этап выполнения
Всякий раз, когда наш скрипт выполняется сначала, он создает глобальный контекст выполнения, а во время фазы создания выполняет следующую задачу:
а. Создает окно глобального объекта
б. Создает привязку объекта this, которая указывает на глобальный объект выше.
c. Установите объем памяти для функций и переменных
d. Сохраните объявление функции в кучах памяти и объявление переменных со значениями undefined в глобальном контексте выполнения.
В нашем примере так:
Глобальный объект: окно,
это: окно,
x: undefined,
продукт: функция {…}.
результат: undefined
После этапа создания он перейдет в этап выполнения, на этом этапе код будет выполняться построчно:
Глобальный объект: окно,
это: окно,
x: 10,
продукт: функция {…}.
результат: product ()
Всякий раз, когда есть вызов функции типа (result = product ()), он создает F контекст выполнения функции, который похож на глобальный контекст выполнения, но вместо создания глобальный объект, он создаст объект arguments, который содержит ссылку на переданные параметры, этап создания продукта будет выглядеть так:
Глобальный объект: окно,
это: Глобальный объект,
z: undefined,
затем этап выполнения:
Глобальный объект: окно,
это: Глобальный объект,
z: 10,
Но мы не получаем конечный результат, потому что мы получили вызов функции во время фазы выполнения глобального контекста выполнения, поэтому сначала будет завершена фаза выполнения контекста выполнения функции, а затем - наш глобальный контекст выполнения. Всем этим управляет стек вызовов.
Стек вызовов:
Стек вызовов основан на формате LIFO, т.е. последний пришел - первым вышел. Когда вы выполняете сценарий, механизм javascript создает глобальный контекст выполнения и помещает его в верхнюю часть стека.
main (): обозначает глобальный контекст выполнения
Всякий раз, когда происходит вызов функции, она создает контекст выполнения функции и помещает его в верхнюю часть стека, и выполнение переходит в верхний контекст стека.
среднее (): обозначает функцию product () {..}
Механизм Javascript выполнит контекст выполнения, который находится наверху стека, и вытолкнет его из стека. Он будет непрерывно повторять цикл до тех пор, пока стопка не опустеет.
Окончательный результат будет таким, как после выполнения всего скрипта 😍.
результат: 100
Вот и все. 🙌
Clap 👏: Если хочешь,
Следуйте ✋: Дополнительные темы,
Комментарий 💭: Сомнения и предложения.