JavaScript | var, let, const

JavaScript | var, let, const

 

  • var
  • let
  • const

 

var

Оператор var объявляет переменные, которые привязаны к «лексической среде» (LexicalEnvironment) текущего контекста выполнения. Переменные Var создаются при создании экземпляра содержащейся в них «записи среды«(Environment Record) и инициализируются значением undefined при создании. В рамках любой «переменной среды» (VariableEnvironment) общий «идентификатор привязки» (BindingIdentifier) может появляться более чем в одном «объявлении переменной» (VariableDeclaration), но эти объявления вместе определяют только одну переменную. Переменной, определенной с помощью VariableDeclaration с инициализатором Initializer, присваивается значение «Выражение присвоения» (AssignmentExpression) его инициализатора Initializer при выполнении VariableDeclaration, а не при создании переменной.

 

let и const

Объявления let и const определяют переменные, которые привязаны к «лексической среде» (LexicalEnvironment) текущего контекста выполнения. Переменные создаются при создании экземпляра содержащейся в них «записи среды«(Environment Record), но к ним нельзя получить доступ каким-либо образом до тех пор, пока не будет вычислена «лексическая привязка» (LexicalBinding) переменной. Переменной, определенной лексической привязкой LexicalBinding с инициализатором Initializer, присваивается значение AssignmentExpression ее инициализатора Initializer при оценке LexicalBinding, а не при создании переменной. Если LexicalBinding в объявлении let не имеет инициализатора Initializer, переменной при оценке LexicalBinding присваивается значение undefined.

 

Таблица 25: Дополнительные компоненты состояния для контекстов выполнения кода ECMAScript

Component (Компонент) Purpose (Цель)
LexicalEnvironment (Лексическая среда) Идентифицирует запись среды, используемую для разрешения ссылок на идентификаторы, сделанных кодом в этом контексте выполнения.
VariableEnvironment (Переменная среда) Идентифицирует запись среды, которая содержит привязки, созданные VariableStatements в этом контексте выполнения.

Компоненты LexicalEnvironment и VariableEnvironment контекста выполнения всегда являются записями среды.

 

Записи окружающей среды

Запись среды (Environment Record) — это тип спецификации, используемый для определения ассоциации идентификаторов с конкретными переменными и функциями на основе лексической структуры вложенности кода ECMAScript. Обычно запись среды связана с определенной синтаксической структурой кода ECMAScript, такой как FunctionDeclaration, BlockStatement или предложение Catch в TryStatement. Каждый раз, когда такой код оценивается, создается новая запись среды для записи привязок идентификаторов, которые создаются этим кодом.

Каждая запись среды имеет поле [[OuterEnv]], которое либо равно null, либо является ссылкой на внешнюю запись среды. Это используется для моделирования логической вложенности значений Environment Record. Внешняя ссылка (внутренней) записи среды — это ссылка на запись среды, которая логически окружает внутреннюю запись среды. Запись внешней среды, конечно, может иметь свою собственную запись внешней среды. Запись среды может служить внешней средой для множества внутренних записей среды. Например, если FunctionDeclaration содержит два вложенных FunctionDeclaration, тогда записи среды каждой из вложенных функций будут иметь в качестве своей внешней записи среды запись среды текущей оценки окружающей функции.

Записи среды — это чисто механизмы спецификации и не обязательно должны соответствовать какому-либо конкретному артефакту реализации ECMAScript. Программа на ECMAScript не может напрямую обращаться к таким значениям или манипулировать ими.

 

Информационные ссылки

JavaScript | Алгоритмические обозначения

JavaScript | Условные обозначения

JavaScript | Зарезервированные слова (ReservedWord)