JavaScript в основном был языком на основе браузера, а теперь он более усовершенствован. JS — это язык сценариев, и он не действует как скомпилированный полностью структурированный язык. Java-скрипт имеет концепцию, называемую кучами и стеками, но не такую, как в Java.

Если в программе есть пустой файл с некоторым импортом JavaScript, это будет самый маленький файл JS, который может быть. Когда появился JavaScript, у него был важный компонент, называемый движком JavaScript. Тот, кто отвечает за компиляцию кода и запуск. Он состоит из двух фаз: фазы создания и фазы исполнения. Фаза создания в основном создает объект активации, сканирует код JavaScript и создает список всех переменных и всех объявлений. На этапе создания также создайте цепочку областей видимости, которая находится в списке, и создайте все переменные в текущей функции. Третий определяется как «этот» объект.

Этот код при первом запуске создает таблицу под названием «стек вызовов». Это называется контекстом выполнения. Этап создания в этой программе создает a и b, а также ans и ans2. Поскольку есть функция, она создает объект добавления и присваивает ему функцию. Это называется глобальным контекстом выполнения или глобальной областью действия. Переменные созданы и не присваивают значения. Переменная будет неопределенной.

На этапе выполнения он присваивает значения переменным. При выполнении функции создается другой контекст выполнения, такой же, как и в первой таблице. Там будут num1 и num2, и они не определены. Когда выполнение завершается, он уничтожает стек и возвращает результат как 70. Всякий раз, когда функция выполняется, она создает новый контекст функции и создает все переменные. Внутри этой функции, если во время этого выполнения была вызвана другая функция, она создает другой контекст выполнения. Это создает кадр стека, который он вызывает как стек вызовов.

Глобальный контекст выполнения и при вызове строки добавления функции в стеке вызовов создается новый кадр для функции. Он выполняет другой фрейм как add2, и если оставить add2, фрейм будет уничтожен. После этого он перейдет в глобальный контекст выполнения.

Есть функция, и внутри тела она периодически вызывает функцию добавления. В первый раз он выполнит функцию добавления и создаст новый контекст выполнения в контексте выполнения функции. Когда это происходит периодически, контекст выполнения будет добавляться в стек вызовов. Это приведет к заполнению стека, что называется переполнением стека. В общем программа создает переменные и есть место для хранения значений. Это называется кучами, а JavaScript хранит переменные и значения. Стек — это место, которое JavaScript использует для вызова метода.

Подъем

Когда вы видите эту программу, она дает значение undefine, потому что на этапе создания она создает переменную и не присваивает ей значение. это называется подъемом, есть и другие способы работы с подъемом. Таким образом, подъем означает, что на этапе создания JS он перемещает все глобальные объявленные переменные наверх, но перемещает только объявление переменной.

Этот скрипт на этапе создания будет конвертировать, как показано ниже.

вар а;

console.log(а);

a=10;

Из-за значения не печатает, потому что присваивает значение после печати. Вместо этого печатайте как undefined. Только объявление переменной перемещается вверх, а назначение остается прежним. Проблема заключается в ключевом слове let.

Затем есть еще одна переменная b, но она не объявлена. a печатает как undefined, а b выдает ошибку, говорящую о том, что не определено. Если переменная не определена, она выдает ошибку, поскольку не определена.

Когда ключевое слово let использовало и выполнило код, a все еще не определено и создало новую область действия, называемую областью сценария. Если это печать, будет ошибка. Это означает, что JS знает, что есть переменная как a, но не присваивает ей значение.

При запуске этого кода появится функция добавления с кодом функции в виде пары ключ-значение. Когда вызывается add2, он говорит, что add2 не является функцией. Таким образом, подъем работает только для функций, а не для ссылок на функции. Когда add2 вызывается после объявления функции, он работает без проблем.

вар анс2=добавить3(12,13);

var add3= (a,b)=› a+b;

Кроме того, в функции стрелки, когда функция, определенная после вызова, говорит, что функция не является функцией.

Ссылка

[1] Криш Динеш». Контекст выполнения | Вещи, которые должен знать каждый разработчик полного стека, но мог бы упустить из виду». Доступно: https://www.youtube.com/watch?v=7TID-nr1Rk4&list=PLD-mYtebG3X85FqXWVS3NFNeQV3DC8RuV&index=1&ab_channel=KrishDinesh [Проверено: 18 июля 2022 г.].

[2] Криш Динеш». Визуализируйте стек вызовов и контекст выполнения | Вещи, которые вы могли пропустить». Доступно: https://www.youtube.com/watch?v=rhXtXp7WLX8&list=PLD-mYtebG3X85FqXWVS3NFNeQV3DC8RuV&index=2&ab_channel=KrishDinesh [Проверено: 18 июля 2022 г.].

[3] Криш Динеш». Подъем | концепция, которую вы, возможно, поняли неправильно».