Основные концепции JavaScript

Bu yazıyı Türkçe olarak buradan okuyabilirsiniz.

В этом сообщении блога и, возможно, в следующих нескольких статьях я попытаюсь охватить основные понятия JavaScript и объяснить их вам в их простейшей форме.

Когда приложение JavaScript запускается, структура данных, называемая стеком, используется для хранения вызываемых функций и информации, которую они хранят, и это называется стеком выполнения. Структура данных стека работает по логике LIFO (Last in First Out) и имеет определенные ограничения. Чтобы понять эту структуру, давайте подумаем таким образом. Допустим, у нас есть коробка и тарелки. Предположим, мы можем перемещать только одну пластину за операцию. Теперь положим эти тарелки в коробку одну за другой.

Позже, когда мы захотим получить первую положенную нами тарелку, мы должны вынимать тарелки из коробки по порядку и по одной тарелке на каждом шагу. Назовем процесс помещения тарелок в коробку «толканием», а процесс распаковки — «выталкиванием». Мы можем кратко описать структуру стека следующим образом.

Теперь вернемся к стороне JavaScript и посмотрим, что именно хранится в стеке выполнения.

Контекст выполнения:

Такое определение, как структура, в которой хранится вся информация, определенная в функции, было бы правильным.

  • Глобальный контекст выполнения
    Даже когда мы запускаем приложение JavaScript, в котором мы не написали никакого кода, структура, созданная JavaScript, называется глобальным контекстом выполнения. При каждом запуске приложения JavaScript глобальный контекст выполнения сначала помещается в стек выполнения и создается глобальный объект. Имя объекта в браузере называется «window», и к нему можно получить доступ с помощью ключевого слова «this».
  • Функциональный контекст выполнения
    Для каждой выполняемой функции в памяти выделяется специальное место, и вся информация об этой функции хранится здесь. Как только функции выполняются, их контекст выполнения создается и помещается в стек выполнения. Когда функция завершается, Контекст выполнения, принадлежащий этой функции, извлекается и удаляется из стека.
function foo(){
  console.log('foo');
  baz();
}
function baz(){
  console.log('baz');
}
foo();
// output 
// foo
// baz

Подводя итог тому, что произошло выше, скажем, что когда наш образец кода JavaScript запускается, он сначала создает глобальный контекст выполнения и глобальный объект, которые должны храниться в этом контексте, а затем в стек выполнения. Затем функция с именем foo вызывается с помощью foo(), и контекст выполнения этой функции создается и помещается в стек. После написания на экране «foo» функция с именем baz вызывается с помощью baz(). Поскольку мы еще не вышли из области действия функции foo, новый Контекст выполнения, созданный для функции baz, помещается поверх foo в область видимости. куча. (см. шаг 4) После этого на экране печатается «баз» и происходит выход из области действия функции с именем баз. По этой причине контекст выполнения baz сначала извлекается из стека выполнения. Позже, из-за выхода из области действия функции foo, ее контекст извлекается из стека выполнения. Поскольку больше нет кода для последующего запуска, из стека появится глобальный контекст выполнения, и программа завершится.

В простейшей форме мы можем суммировать стек выполнения и контекст выполнения таким образом. В следующей статье я попытаюсь объяснить этапы создания Контекста выполнения и Лексического окружения. До скорой встречи здесь снова.