#Введение
JavaScript (JS) — это язык сценариев, в основном используемый в Интернете. JavaScript отличается от других языков программирования. В JavaScript есть функция под названием Scope и стек выполнения. Хотя эту концепцию не легко понять, но она имеет важное значение, с помощью этой концепции вы можете создавать различные шаблоны проектирования и лучше понимать этот язык. Однако это также является огромным источником путаницы среди разработчиков, и на то есть веские причины.
#Что такое стек контекста выполнения?
JavaScript — это однопоточный язык, то есть одновременно может выполняться только одна задача. Когда интерпретатор JavaScript изначально выполняет код, он по умолчанию сначала входит в глобальный контекст выполнения. Каждый вызов функции с этого момента приведет к созданию нового контекста выполнения. Понять базовый стек контекста выполнения (ECS). Давайте подробно разберем каждое слово
Выполнение: выполнение в компьютерной и программной инженерии — это процесс, посредством которого компьютер или виртуальная машина выполняет инструкции компьютерной программы. Инструкции в программе запускают последовательность простых действий на исполняющей машине.
Контекст. Контекст представляет вашу среду. Он представляет состояние, в котором вы находитесь в своей системе.
Стек: структура данных, которая реализует LIFO «последним пришел — первым вышел», т. е. «последний пришел» будет обслуживать первого.
Чтобы продолжить обсуждение, давайте разберемся с базовым стеком выполнения, который каждый язык программирования имеет свой собственный стек выполнения, в котором выполняется программа. Каждое выполнение происходит в своем контексте, который называется контекстом выполнения.
#Что такое область действия?
Область действия означает доступность переменной, функции или объекта в контексте. Нам нужна область действия, чтобы код мог иметь битовый уровень безопасности. Пользователь должен иметь доступ к определенным вещам, которые ему нужны в то время, чтобы другой код мог оставаться непривязанным во время выполнения или написания некоторого кода.
# Разница между областью действия и контекстом
Многие люди путают термины объем и контекст. По сути, Scope основан на функциях, а контекст основан на объектах. Область действия — это использование/доступ к переменной внутри функции при ее вызове, и она уникальна для каждого вызова. Контекст всегда является значением ключевого слова «this», которое является ссылкой на объект, «владеющий» исполняемым в данный момент кодом.
#Different Types of Scope
Контекст выполнения в JavaScript бывает трех типов:
1. Глобальный охват:
Когда вы начинаете писать JavaScript в документе, вы уже находитесь в глобальной области видимости. Во всем документе JavaScript есть только одна глобальная область. Переменная находится в глобальной области видимости, если она определена вне функции.
Например :
<html> <body> <script type=”text/JavaScript”> string =”Hello world”; console.log(“Variable value from Global scope “+string); </script> </body> </html>
Здесь приведенная выше программа выведет
Variable value from Global scope Hello world
здесь код выполняется автоматически, когда html-файл загружается в браузер
2. Функциональная область. Функциональная область определяется как область, создаваемая выполнением кода внутри функции. Каждая функция имеет свой индивидуальный контекст выполнения.
Например:-
<html> <body> <script type=”text/JavaScript”> function a(){ string = “Hello World from Function context”; console.log(string); } a(); string =”Hello world”; console.log(“Variable value from Global scope “+string); </script> </body> </html>
вывод приведенного выше кода будет
Hello World from Function context Variable value from Global scope Hello world
Здесь, как вы можете видеть, сначала происходит глобальное выполнение, а затем функциональное выполнение, потому что глобальное выполнение происходит построчно, когда приходит функция, функция помещается в последнюю часть стека выполнения, затем, когда выполнение функции завершено, запускается глобальное выполнение. снова и завершает свой код
3. Область оценки — текст, который будет выполняться внутри внутренней функции оценки. Это выполнение происходит внутри функции
Например
<html> <body> <script type=”text/JavaScript”> function evaluation(){ string = “Hello World from Evaluation scope”; console.log(string); } function a(){ evaluation() string = “Hello World from Function scope”; console.log(string); } a(); string =”Hello world”; console.log(“Variable value from Global scope “+string); </script> </body> </html>
Здесь вывод будет следующим: -
Hello World from Evaluation context Hello World from Function context Variable value from Global scope Hello world
Здесь мы видим, что выходные данные кода сначала возвращают первый контекст оценки, поскольку первая строка функции выполняется, она создает новый контекст, который выполняется первым, затем остальная часть функции, а затем происходит выполнение глобальной области.
Мы можем понять вышеуказанную концепцию с помощью следующей диаграммы
На этой диаграмме показан контекст выполнения.
Поняв основы, давайте рассмотрим приведенную ниже программу.
<html> <body> <script type=”text/JavaScript”> function evaluation(){ console.log(string); } function a(){ string = “Hello World from Function context”; evaluation() console.log(string); } string =”Hello world”; a(); console.log(“Variable value from Global scope “+string); </script> </body> </html>
Каким будет результат следующей программы?
Вывод выглядит следующим образом
Hello World from Function context Hello World from Function context Variable value from Global scope Hello World from Function context
Здесь строковая переменная функции оценки взяла значение переменной строки из функции a, поскольку строковая переменная не получила значение из своей области, она извлекает сверху свою область, которая является функциональной областью, из контекста выполнения.
Теперь что насчет следующего:
<html> <body> <script type=”text/JavaScript”> function evaluation(){ console.log(“Variable value from evaluation scope “+string); } function a(){ evaluation() console.log(“Variable value from functional scope “+string); } string =”Hello world”; a(); console.log(“Variable value from Global scope “+string); </script> </body> </html>
эта программа даст следующее
Variable value from evaluation scope Hello world Variable value from functional scope Hello world Variable value from Global scope Hello world
Теперь мы видим, что область над стеком приняла значение переменной из своей нижней области, то есть глобальная переменная области видимости была взята локальной областью, а затем в область оценки это дало то, что называется цепочкой областей.
Цепочка #Scope
Для каждого контекста выполнения существует связанная с ним цепочка областей видимости. Цепочка областей действия содержит объект переменной для каждого контекста выполнения в стеке выполнения области. Он используется для определения доступа к переменным и разрешения идентификаторов. это можно понять из следующего:
Цепочка областей видимости возможна из-за лексической области видимости. Лексическая область видимости означает, что во вложенной группе функций внутренние функции имеют доступ к переменным и другим ресурсам своей родительской области. Это означает, что дочерние функции лексически связаны с контекстом выполнения своих родителей.
#Заключение
Под этим мы понимаем, что JavaScript — это однопоточный язык программирования с однократным выполнением. Это помогает контексту JavaScript выполняться со стеком, что приводит к цепочке областей видимости. Эту концепцию сложно понять, но она важна для создания новых шаблонов проектирования с помощью JavaScript.