ECMAScript | Анализ Области Видимости

ECMAScript | Анализ Области Видимости

 

8.1.1 SS: BoundNames
8.1.2 SS: DeclarationPart
8.1.3 SS: IsConstantDeclaration
8.1.4 SS: LexicallyDeclaredNames
8.1.5 SS: LexicallyScopedDeclarations
8.1.6 SS: VarDeclaredNames
8.1.7 SS: VarScopedDeclarations
8.1.8 SS: TopLevelLexicallyDeclaredNames
8.1.9 SS: TopLevelLexicallyScopedDeclarations
8.1.10 SS: TopLevelVarDeclaredNames
8.1.11 SS: TopLevelVarScopedDeclarations

 

8.1.1 Статическая семантика: BoundNames (Связанные имена)

Примечание

"*default*" используется в этой спецификации как синтетическое имя для поднимаемых анонимных функций, которые определены с помощью объявлений экспорта.

BindingIdentifier : Identifier

1. Вернуть Список, единственным элементом которого является строковое значение StringValue идентификатора Identifier.

BindingIdentifier : yield

1. Вернуть Список, единственным элементом которого является строка "yield".

BindingIdentifier : await

1. Вернуть Список, единственным элементом которого является строка "await".

LexicalDeclaration : LetOrConst BindingList ;

1. Верните связанные имена BoundNames из BindingList.

BindingList : BindingList , LexicalBinding

1. Пусть names1 будут связанные имена BoundNames из BindingList.
2. Пусть names2 будут связанные имена BoundNames из LexicalBinding.
3. Вернуть конкатенацию списка names1 и names2.

LexicalBinding : BindingIdentifier Initializer opt

1. Верните связанные имена BoundNames для BindingIdentifier.

LexicalBinding : BindingPattern Initializer

1. Верните связанные имена BoundNames из BindingPattern.

VariableDeclarationList : VariableDeclarationList , VariableDeclaration

1. Пусть names1 будут связанные имена BoundNames из VariableDeclarationList.
2. Пусть names2 будут связанные имена BoundNames из VariableDeclaration.
3. Вернуть конкатенацию списков names1 и names2.

VariableDeclaration : BindingIdentifier Initializer opt

1. Верните связанные имена BoundNames из BindingIdentifier.

VariableDeclaration : BindingPattern Initializer

1. Верните связанные имена BoundNames из BindingPattern.

ObjectBindingPattern : { }

1. Верните новый пустой Список.

ObjectBindingPattern : { BindingPropertyList , BindingRestProperty }

1. Пусть names1 будет связанные имена BoundNames из BindingPropertyList.
2. Пусть names2 будет связанные имена BoundNames из BindingRestProperty.
3. Вернуть конкатенацию списков names1 и names2.

ArrayBindingPattern : [ Elision opt ]

1. Верните новый пустой Список.

ArrayBindingPattern : [ Elision opt BindingRestElement ]

1. Верните связанные имена BoundNames из BindingRestElement.

ArrayBindingPattern : [ BindingElementList , Elision opt ]

1. Верните связанные имена BoundNames из BindingElementList.

ArrayBindingPattern : [ BindingElementList , Elision opt BindingRestElement ]

1. Пусть names1 будут связанные имена BoundNames из BindingElementList.
2. Пусть names2 будут связанные имена BoundNames из BindingRestElement.
3. Вернуть конкатенацию списков names1 и names2.

BindingPropertyList : BindingPropertyList , BindingProperty

1. Пусть names1 будут связанные имена BoundNames из BindingPropertyList.
2. Пусть names2 будут связанные имена BoundNames из BindingProperty.
3. Вернуть конкатенацию списков names1 и names2.

BindingElementList : BindingElementList , BindingElisionElement

1. Пусть names1 будут связанные имена BoundNames из BindingElementList.
2. Пусть names2 будут связанные имена BoundNames из BindingElisionElement.
3. Вернуть конкатенацию списков names1 и names2.

BindingElisionElement : Elision opt BindingElement

1. Верните связанные имена BoundNames из BindingElement.

BindingProperty : PropertyName : BindingElement

1. Верните связанные имена BoundNames из BindingElement.

SingleNameBinding : BindingIdentifier Initializer opt

1. Верните связанные имена BoundNames из BindingIdentifier.

BindingElement : BindingPattern Initializer opt

1. Верните связанные имена BoundNames из BindingPattern.

ForDeclaration : LetOrConst ForBinding

1. Верните связанные имена BoundNames из ForBinding.

FunctionDeclaration : function BindingIdentifier ( FormalParameters ) { FunctionBody }

1. Верните связанные имена BoundNames для BindingIdentifier.

FunctionDeclaration : function ( FormalParameters ) { FunctionBody }

1. Верните « "*default*" ».

FormalParameters : [empty]

1. Верните новый пустой Список.

FormalParameters : FormalParameterList , FunctionRestParameter

1. Пусть names1 будут связанные имена BoundNames из FormalParameterList.
2. Пусть names2 будут связанные имена BoundNames из FunctionRestParameter.
3. Вернуть конкатенацию списков names1 и names2.

FormalParameterList : FormalParameterList , FormalParameter

1. Пусть names1 будут связанные имена BoundNames из FormalParameterList.
2. Пусть names2 будут связанные имена BoundNames из FormalParameter.
3. Вернуть конкатенацию списков names1 и names2.

ArrowParameters : CoverParenthesizedExpressionAndArrowParameterList

1. Пусть formals будет ArrowFormalParameters, который покрывается CoverParenthesizedExpressionAndArrowParameterList.
2. Верните вязанные имена BoundNames из formals.

GeneratorDeclaration : function * BindingIdentifier ( FormalParameters ) { GeneratorBody }

1. Верните связанные имена BoundNames для BindingIdentifier.

GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }

1. Верните « "*default*" ».

AsyncGeneratorDeclaration : async function * BindingIdentifier ( FormalParameters ) { AsyncGeneratorBody }

1. Верните связанные имена BoundNames для BindingIdentifier.

AsyncGeneratorDeclaration : async function * ( FormalParameters ) { AsyncGeneratorBody }

1. Верните « "*default*" ».

ClassDeclaration : class BindingIdentifier ClassTail

1. Верните связанные имена BoundNames для BindingIdentifier.

ClassDeclaration : class ClassTail

1. Верните « "*default*" ».

AsyncFunctionDeclaration : async function BindingIdentifier ( FormalParameters ) { AsyncFunctionBody }

1. Верните связанные имена BoundNames из BindingIdentifier.

AsyncFunctionDeclaration : async function ( FormalParameters ) { AsyncFunctionBody }

1. Верните « "*default*" ».

CoverCallExpressionAndAsyncArrowHead : MemberExpression Arguments

1. Пусть голова head будет AsyncArrowHead, который покрывается CoverCallExpressionAndAsyncArrowHead.
2. Верните связанные имена BoundNames из головы head.

ImportDeclaration : import ImportClause FromClause ;

1. Верните связанные имена BoundNames из ImportClause.

ImportDeclaration : import ModuleSpecifier ;

1. Верните новый пустой Список.

ImportClause : ImportedDefaultBinding , NameSpaceImport

1. Пусть names1 будут связанные имена BoundNames из ImportedDefaultBinding.
2. Пусть names2 будут связанные имена BoundNames из NameSpaceImport.
3. Вернуть конкатенацию списков names1 и names2.

ImportClause : ImportedDefaultBinding , NamedImports

1. Пусть names1 будут связанные имена BoundNames из ImportedDefaultBinding.
2. Пусть names2 будут связанные имена BoundNames из NamedImports.
3. Вернуть конкатенацию списков names1 и names2.

NamedImports : { }

1. Верните новый пустой Список.

ImportsList : ImportsList , ImportSpecifier

1. Пусть names1 будут связанные имена BoundNames из в ImportsList.
2. Пусть names2 будут связанные имена BoundNames из ImportSpecifier.
3. Вернуть конкатенацию списков names1 и names2.

ImportSpecifier : IdentifierName as ImportedBinding

1. Верните связанные имена BoundNames из ImportedBinding.

ExportDeclaration :

export ExportFromClause FromClause ;

export NamedExports ;

1. Верните новый пустой Список.

ExportDeclaration : export VariableStatement

1. Верните связанные имена BoundNames из VariableStatement.

ExportDeclaration : export Declaration

1. Верните связанные имена BoundNames объявления Declaration.

ExportDeclaration : export default HoistableDeclaration

1. Пусть declarationNames будут связанными именами BoundNames из HoistableDeclaration.
2. Если declarationNames не включает элемент "*default*", добавьте "*default*" к declarationNames.
3. Верните declarationNames.

ExportDeclaration : export default ClassDeclaration

1. Пусть declarationNames будут связанными именами BoundNames из ClassDeclaration.
2. Если declarationNames не включает элемент "*default*", добавьте "*default*" к declarationNames.
3. Верните declarationNames.

ExportDeclaration : export default AssignmentExpression ;

1. Верните « "*default*" ».

 

8.1.2 Статическая семантика: DeclarationPart  (Часть Объявления)

HoistableDeclaration : FunctionDeclaration

Вернуть FunctionDeclaration.

HoistableDeclaration : GeneratorDeclaration

 GeneratorDeclaration.

HoistableDeclaration : AsyncFunctionDeclaration

 AsyncFunctionDeclaration.

HoistableDeclaration : AsyncGeneratorDeclaration

 AsyncGeneratorDeclaration.

Declaration : ClassDeclaration

 ClassDeclaration.

Declaration : LexicalDeclaration

 LexicalDeclaration.

 

8.1.3 Статическая семантика: IsConstantDeclaration (Является ли объявлением константы)

LexicalDeclaration : LetOrConst BindingList ;

1. Верните IsConstantDeclaration из LetOrConst.

LetOrConst : let

1. Вернуть false.

LetOrConst : const

1. Верните true.

FunctionDeclaration :

function BindingIdentifier ( FormalParameters ) { FunctionBody }

function ( FormalParameters ) { FunctionBody }

GeneratorDeclaration :

function * BindingIdentifier ( FormalParameters ) { GeneratorBody }

function * ( FormalParameters ) { GeneratorBody }

AsyncGeneratorDeclaration :

async function * BindingIdentifier ( FormalParameters ) { AsyncGeneratorBody }

async function * ( FormalParameters ) { AsyncGeneratorBody }

AsyncFunctionDeclaration :

async function BindingIdentifier ( FormalParameters ) { AsyncFunctionBody }

async function ( FormalParameters ) { AsyncFunctionBody }

1. Вернуть false.

ClassDeclaration :

class BindingIdentifier ClassTail

class ClassTail

1. Вернуть false.

ExportDeclaration :

export ExportFromClause FromClause ;

export NamedExports ;

export default AssignmentExpression ;

1. Вернуть false.
Примечание

Нет необходимости рассматривать export default AssignmentExpression как объявление константы, потому что не существует синтаксиса, разрешающего присвоение имени внутренней привязки, используемого для ссылки на объект по умолчанию модуля.

 

8.1.4 Статическая семантика: LexicallyDeclaredNames (Лексически объявленные имена)

Block : { }

1. Верните новый пустой Список.

StatementList : StatementList StatementListItem

1. Пусть names1 будут лексически объявленными именами LexicallyDeclaredNames из StatementList.
2. Пусть names2 будут лексически объявленными именами LexicallyDeclaredNames из StatementListItem.
3. Вернуть конкатенацию списков names1 и names2.

StatementListItem : Statement

1. Если Statement является Statement : LabelledStatement, верните лексически объявленные имена LexicallyDeclaredNames из LabelledStatement.
2. Верните новый пустой Список.

StatementListItem : Declaration

1. Верните связанные имена BoundNames из Declaration.

CaseBlock : { }

1. Верните новый пустой Список.

CaseBlock : { CaseClauses opt DefaultClause CaseClauses opt }

1. Если присутствуют первые случаи CaseClauses, пусть names1 будут лексически объявленными именами LexicallyDeclaredNames первого CaseClauses.
2. В противном случае пусть names1 будет новым пустым Списком.
3. Пусть names2 будут лексически объявленными именами LexicallyDeclaredNames из DefaultClause.
4. Если присутствуют вторые случаи CaseClauses, пусть names3 будут лексически объявленными именами LexicallyDeclaredNames второго CaseClauses.
5. В противном случае пусть names3 будет новым пустым списком.
6. Верните конкатенацию списка names1, names2 и names3.

CaseClauses : CaseClauses CaseClause

1. Пусть names1 будет LexicallyDeclaredNames из CaseClauses.
2. Пусть names2 будет LexicallyDeclaredNames из CaseClause.
3. Вернуть конкатенацию списков names1 и names2.

CaseClause : case Expression : StatementList opt

1. Если StatementList присутствует, верните LexicallyDeclaredNames из StatementList.
2. Верните новый пустой Список.

DefaultClause : default : StatementList opt

1. Если StatementList присутствует, верните LexicallyDeclaredNames из StatementList.
2. Верните новый пустой Список.

LabelledStatement : LabelIdentifier : LabelledItem

1. Верните LexicallyDeclaredNames из LabelledItem.

LabelledItem : Statement

1. Верните новый пустой Список.

LabelledItem : FunctionDeclaration

1. Верните связанные имена BoundNames из FunctionDeclaration.

FunctionStatementList : [empty]

1. Верните новый пустой Список.

FunctionStatementList : StatementList

1. Верните TopLevelLexicallyDeclaredNames из StatementList.

ClassStaticBlockStatementList : [empty]

1. Верните новый пустой Список.

ClassStaticBlockStatementList : StatementList

1. Верните TopLevelLexicallyDeclaredNames из StatementList.

ConciseBody : ExpressionBody

1. Верните новый пустой Список.

AsyncConciseBody : ExpressionBody

1. Верните новый пустой Список.

Script : [empty]

1. Верните новый пустой Список.

ScriptBody : StatementList

1. Верните TopLevelLexicallyDeclaredNames из StatementList.
Примечание 1

На верхнем уровне скрипта Script объявления функций обрабатываются как объявления var, а не как лексические объявления.

Примечание 2

LexicallyDeclaredNames модуля Module включает имена всех его импортированных привязок.

 

ModuleItemList : ModuleItemList ModuleItem

1. Пусть names1 будет LexicallyDeclaredNames для ModuleItemList.
2. Пусть names2 будет LexicallyDeclaredNames для ModuleItem.
3. Вернуть конкатенацию списков names1 и names2.

ModuleItem : ImportDeclaration

1. Верните связанные имена BoundNames из ImportDeclaration.

ModuleItem : ExportDeclaration

1. Если ExportDeclaration является export VariableStatement, вернуть новый пустой Список. 
2. Верните BoundNames из ExportDeclaration.

ModuleItem : StatementListItem

1. Верните LexicallyDeclaredNames из StatementListItem.
Примечание 3

На верхнем уровне модуля Module объявления функций обрабатываются как лексические объявления, а не как объявления var.

 

8.1.5 Статическая семантика: LexicallyScopedDeclarations (Объявления с лексической областью видимости)

StatementList : StatementList StatementListItem

1. Пусть declarations1 будут LexicallyScopedDeclarations из StatementList.
2. Пусть declarations2 будут LexicallyScopedDeclarations из StatementListItem.
3. Вернуть объединение списков declarations1 и declarations2.

StatementListItem : Statement

1. Если Statement является Statement : LabelledStatement, верните LexicallyScopedDeclarations из LabelledStatement.
2. Верните новый пустой Список.

StatementListItem : Declaration

1. Вернуть Список, единственным элементом которого является Часть Декларации из Declaration.

CaseBlock : { }

1. Верните новый пустой Список.

CaseBlock : { CaseClauses opt DefaultClause CaseClauses opt }

1. Если присутствуют первый CaseClauses, пусть declarations1 будут LexicallyScopedDeclarations первого CaseClauses.
2. В противном случае, пусть declarations1 будет новым пустым Списком.
3. Пусть declarations2 будут LexicallyScopedDeclarations из DefaultClause.
4. Если присутствует второй CaseClauses, пусть declarations3 будут LexicallyScopedDeclarations второго CaseClauses.
5. Иначе, пусть declarations3 будет новым пустым Списком.
6. Верните конкатенацию списков declarations1, declarations2 и declarations3.

CaseClauses : CaseClauses CaseClause

1. Пусть declarations1 будут LexicallyScopedDeclarations of CaseClauses.
2. Пусть declarations2 будут LexicallyScopedDeclarations из CaseClause.
3. Вернуть объединение списков declarations1 и declarations2.

CaseClause : case Expression : StatementList opt

1. Если StatementList присутствует, верните LexicallyScopedDeclarations из StatementList.
2. Верните новый пустой Список.

DefaultClause : default : StatementList opt

1. Если StatementList присутствует, верните LexicallyScopedDeclarations из StatementList.
2. Верните новый пустой Список.

LabelledStatement : LabelIdentifier : LabelledItem

1. Верните LexicallyScopedDeclarations для LabelledItem.

LabelledItem : Statement

1. Верните новый пустой Список.

LabelledItem : FunctionDeclaration

1. Верните Список, единственным элементом которого является FunctionDeclaration.

FunctionStatementList : [empty]

1. Верните новый пустой Список.

FunctionStatementList : StatementList

1. Верните TopLevelLexicallyScopedDeclarations из StatementList.

ClassStaticBlockStatementList : [empty]

1. Верните новый пустой Список.

ClassStaticBlockStatementList : StatementList

1. Верните TopLevelLexicallyScopedDeclarations из списка StatementList.

ConciseBody : ExpressionBody

1. Верните новый пустой Список.

AsyncConciseBody : ExpressionBody

1. Верните новый пустой Список.

Script : [empty]

1. Верните новый пустой Список.

ScriptBody : StatementList

1. Верните TopLevelLexicallyScopedDeclarations из списка StatementList.

Module : [empty]

1. Верните новый пустой Список.

ModuleItemList : ModuleItemList ModuleItem

1. Пусть declarations1 будут LexicallyScopedDeclarations для ModuleItemList.
2. Пусть declarations2 будут LexicallyScopedDeclarations для ModuleItem.
3. Вернуть объединение списков declarations1 и declarations2.

ModuleItem : ImportDeclaration

1. Верните новый пустой Список.

ExportDeclaration :

export ExportFromClause FromClause ;

export NamedExports ;

export VariableStatement

1. Верните новый пустой Список.

ExportDeclaration : export Declaration

1. Вернуть Список, единственным элементом которого является Частью Декларации из Declaration.

ExportDeclaration : export default HoistableDeclaration

1. Верните Список, единственным элементом которого является Частью Декларации из HoistableDeclaration.

ExportDeclaration : export default ClassDeclaration

1. Верните Список, единственным элементом которого является ClassDeclaration.

ExportDeclaration : export default AssignmentExpression ;

1. Верните Список, единственным элементом которого является это ExportDeclaration.

 

8.1.6 Статическая семантика: VarDeclaredNames (Объявленные имена Var)

Statement :

EmptyStatement

ExpressionStatement

ContinueStatement

BreakStatement

ReturnStatement

ThrowStatement

DebuggerStatement

1. Верните новый пустой Список.

Block : { }

1. Верните новый пустой Список.

StatementList : StatementList StatementListItem

1. Пусть names1 будет VarDeclaredNames из StatementList.
2. Пусть names2 будет VarDeclaredNames из StatementListItem.
3. Вернуть конкатенацию списков names1 и names2.

StatementListItem : Declaration

1. Верните новый пустой Список.

VariableStatement : var VariableDeclarationList ;

1. Верните связанные имена BoundNames из VariableDeclarationList.

IfStatement : if ( Expression ) Statement else Statement

1. Пусть names1 будет VarDeclaredNames первого Statement.
2. Пусть names2 будет VarDeclaredNames второго Statement.
3. Вернуть конкатенацию списков names1 и names2.

IfStatement : if ( Expression ) Statement

1. Верните VarDeclaredNames из Statement.

DoWhileStatement : do Statement while ( Expression ) ;

1. Верните VarDeclaredNames из Statement.

WhileStatement : while ( Expression ) Statement

1. Верните VarDeclaredNames из Statement.

ForStatement : for ( Expression opt ; Expression opt ; Expression opt ) Statement

1. Верните VarDeclaredNames из Statement.

ForStatement : for ( var VariableDeclarationList ; Expression opt ; Expression opt ) Statement

1. Пусть names1 будет связанными именами BoundNames из VariableDeclarationList.
2. Пусть names2 будет VarDeclaredNames из Statement.
3. Вернуть конкатенацию списков names1 и names2.

ForStatement : for ( LexicalDeclaration Expression opt ; Expression opt ) Statement

1. Верните VarDeclaredNames из Statement.

ForInOfStatement :

for ( LeftHandSideExpression in Expression ) Statement

for ( ForDeclaration in Expression ) Statement

for ( LeftHandSideExpression of AssignmentExpression ) Statement

for ( ForDeclaration of AssignmentExpression ) Statement

for await ( LeftHandSideExpression of AssignmentExpression ) Statement

for await ( ForDeclaration of AssignmentExpression ) Statement

1. Верните VarDeclaredNames из Statement.

ForInOfStatement :

for ( var ForBinding in Expression ) Statement

for ( var ForBinding of AssignmentExpression ) Statement

for await ( var ForBinding of AssignmentExpression ) Statement

1. Пусть names1 будет связанные имена BoundNames из ForBinding.
2. Пусть names2 будет VarDeclaredNames из Statement.
3. Вернуть конкатенацию списков names1 и names2.
Примечание

Этот раздел расширен Приложением B.3.5.

 

WithStatement : with ( Expression ) Statement

1. Верните VarDeclaredNames из Statement.

SwitchStatement : switch ( Expression ) CaseBlock

1. Верните VarDeclaredNames из Statement.

CaseBlock : { }

1. Верните новый пустой Список.

CaseBlock : { CaseClauses opt DefaultClause CaseClauses opt }

1. Если присутствует первый CaseClauses, пусть names1 будет VarDeclaredNames первого CaseClauses.
2. Иначе пусть names1 будет новым пустым Списком.
3. Пусть names2 будет VarDeclaredNames из DefaultClause.
4. Если присутствует второй CaseClauses, пусть names3 будет VarDeclaredNames второго CaseClauses.
5. Иначе пусть names3 будет новым пустым Списком.
6. Верните конкатенацию списков names1, names2 и names3.

CaseClauses : CaseClauses CaseClause

1. Пусть names1 будет VarDeclaredNames из CaseClauses.
2. Пусть names2 будет VarDeclaredNames из CaseClause.
3. Вернуть конкатенацию списков names1 и names2.

CaseClause : case Expression : StatementList opt

1. Если StatementList присутствует, верните VarDeclaredNames из StatementList.
2. Верните новый пустой Список.

DefaultClause : default : StatementList opt

1. Если StatementList присутствует, верните VarDeclaredNames из StatementList.
2. Верните новый пустой Список.

LabelledStatement : LabelIdentifier : LabelledItem

1. Верните VarDeclaredNames для LabelledItem.

LabelledItem : FunctionDeclaration

1. Верните новый пустой Список.

TryStatement : try Block Catch

1. Пусть names1 будет VarDeclaredNames из Block.
2. Пусть names2 будет VarDeclaredNames из Catch.
3. Вернуть конкатенацию списков names1 и names2.

TryStatement : try Block Finally

1. Пусть names1 будет VarDeclaredNames из Block.
2. Пусть names2 будет VarDeclaredNames из Finally.
3. Вернуть конкатенацию списков names1 и names2.

TryStatement : try Block Catch Finally

1. Пусть names1 будет VarDeclaredNames из Block.
2. Пусть names2 будет VarDeclaredNames из Catch.
3. Пусть names3 будет VarDeclaredNames из Finally.
4. Верните конкатенацию списков names1, names2 и names3.

Catch : catch ( CatchParameter ) Block

1. Верните VarDeclaredNames из Block.

FunctionStatementList : [empty]

1. Верните новый пустой Список.

FunctionStatementList : StatementList

1. Верните TopLevelVarDeclaredNames из StatementList.

ClassStaticBlockStatementList : [empty]

1. Верните новый пустой Список.

ClassStaticBlockStatementList : StatementList

1. Верните TopLevelVarDeclaredNames из StatementList.

ConciseBody : ExpressionBody

1. Верните новый пустой Список.

AsyncConciseBody : ExpressionBody

1. Верните новый пустой Список.

Script : [empty]

1. Верните новый пустой Список.

ScriptBody : StatementList

1. Верните TopLevelVarDeclaredNames из StatementList.

ModuleItemList : ModuleItemList ModuleItem

1. Пусть names1 будет VarDeclaredNames в ModuleItemList.
2. Пусть names2 будет VarDeclaredNames для ModuleItem.
3. Вернуть конкатенацию списков names1 и names2.

ModuleItem : ImportDeclaration

1. Верните новый пустой Список.

ModuleItem : ExportDeclaration

1. Если ExportDeclaration является export VariableStatement, вернуть связанные имена BoundNames из ExportDeclaration.
2. Верните новый пустой Список.

 

 

8.1.7 Статическая семантика: VarScopedDeclarations (Ограниченные Объявления «Var»)

Statement :

EmptyStatement

ExpressionStatement

ContinueStatement

BreakStatement

ReturnStatement

ThrowStatement

DebuggerStatement

1. Верните новый пустой Список.

Block : { }

1. Верните новый пустой Список.

StatementList : StatementList StatementListItem

1. Пусть declarations1 будут VarScopedDeclarations из StatementList.
2. Пусть declarations2 будут VarScopedDeclarations из StatementListItem.
3. Вернуть объединение списков declarations1 и declarations2.

StatementListItem : Declaration

1. Верните новый пустой Список.

VariableDeclarationList : VariableDeclaration

1. Верните Список, единственным элементом которого является VariableDeclaration.

VariableDeclarationList : VariableDeclarationList , VariableDeclaration

1. Пусть declarations1 будут VarScopedDeclarations из VariableDeclarationList.
2. Вернуть конкатенацию списков declarations1 и «VariableDeclaration».

IfStatement : if ( Expression ) Statement else Statement

1. Пусть declarations1 будут VarScopedDeclarations первого Statement.
2. Пусть declarations2 будут VarScopedDeclarations второго Statement.
3. Вернуть объединение списков declarations1 и declarations2.

IfStatement : if ( Expression ) Statement

1. Верните VarScopedDeclarations из Statement.

DoWhileStatement : do Statement while ( Expression ) ;

1. Верните VarScopedDeclarations из Statement.

WhileStatement : while ( Expression ) Statement

1. Верните VarScopedDeclarations из Statement.

ForStatement : for ( Expression opt ; Expression opt ; Expression opt ) Statement

1. Верните VarScopedDeclarations из Statement.

ForStatement : for ( var VariableDeclarationList ; Expression opt ; Expression opt ) Statement

1. Пусть declarations1 будут VarScopedDeclarations из VariableDeclarationList.
2. Пусть declarations2 будут VarScopedDeclarations из Statement.
3. Вернуть объединение списков declarations1 и declarations2.

ForStatement : for ( LexicalDeclaration Expression opt ; Expression opt ) Statement

1. Верните VarScopedDeclarations из Statement.

ForInOfStatement :

for ( LeftHandSideExpression in Expression ) Statement

for ( ForDeclaration in Expression ) Statement

for ( LeftHandSideExpression of AssignmentExpression ) Statement

for ( ForDeclaration of AssignmentExpression ) Statement

for await ( LeftHandSideExpression of AssignmentExpression ) Statement

for await ( ForDeclaration of AssignmentExpression ) Statement

1. Верните VarScopedDeclarations из Statement.

ForInOfStatement :

for ( var ForBinding in Expression ) Statement

for ( var ForBinding of AssignmentExpression ) Statement

for await ( var ForBinding of AssignmentExpression ) Statement

1. Пусть declarations1 будут Списком, единственным элементом которого является ForBinding.
2. Пусть declarations2 будут VarScopedDeclarations из Statement.
3. Вернуть объединение списков declarations1 и declarations2.
Примечание

Этот раздел расширен Приложением B.3.5.

WithStatement : with ( Expression ) Statement

1. Верните VarScopedDeclarations из Statement.

SwitchStatement : switch ( Expression ) CaseBlock

1. Верните VarScopedDeclarations из CaseBlock.

CaseBlock : { }

1. Верните новый пустой Список.

CaseBlock : { CaseClauses opt DefaultClause CaseClauses opt }

1. Если присутствует первый CaseClauses, пусть declarations1 будут VarScopedDeclarations первого CaseClauses.
2. Иначе, пусть declarations1 будет новым пустым Списком.
3. Пусть declarations2 будут VarScopedDeclarations из DefaultClause.
4. Если присутствует второй CaseClauses, пусть declarations3 будут VarScopedDeclarations второго CaseClauses.
5. Иначе, пусть declarations3 будет новым пустым Списком.
6. Верните конкатенацию списков declarations1, declarations2 и declarations3.

CaseClauses : CaseClauses CaseClause

1. Пусть declarations1 будут VarScopedDeclarations из CaseClauses.
2. Пусть declarations2 будут VarScopedDeclarations из CaseClause.
3. Вернуть объединение списков declarations1 и declarations2.

CaseClause : case Expression : StatementList opt

1. Если StatementList присутствует, верните VarScopedDeclarations из StatementList.
2. Верните новый пустой Список.

DefaultClause : default : StatementList opt

1. Если StatementList присутствует, верните VarScopedDeclarations из StatementList.
2. Верните новый пустой Список.

LabelledStatement : LabelIdentifier : LabelledItem

1. Верните VarScopedDeclarations для LabelledItem.

LabelledItem : FunctionDeclaration

1. Верните новый пустой Список.

TryStatement : try Block Catch

1. Пусть declarations1 будут VarScopedDeclarations из Block.
2. Пусть declarations2 будут VarScopedDeclarations из Catch.
3. Вернуть объединение списков declarations1 и declarations2.

TryStatement : try Block Finally

1. Пусть declarations1 будут VarScopedDeclarations из Block.
2. Пусть declarations2 будут VarScopedDeclarations из Finally.
3. Вернуть объединение списков declarations1 и declarations2.

TryStatement : try Block Catch Finally

1. Пусть declarations1 будут VarScopedDeclarations из Block.
2. Пусть declarations2 будут VarScopedDeclarations из Catch.
3. Пусть declarations3 будут VarScopedDeclarations из Finally.
4. Верните конкатенацию списков declarations1, declarations2 и declarations3.

Catch : catch ( CatchParameter ) Block

1. Верните VarScopedDeclarations из Block.

FunctionStatementList : [empty]

1. Верните новый пустой Список.

FunctionStatementList : StatementList

1. Верните TopLevelVarScopedDeclarations из списка StatementList.

ClassStaticBlockStatementList : [empty]

1. Верните новый пустой Список.

ClassStaticBlockStatementList : StatementList

1. Верните TopLevelVarScopedDeclarations из списка StatementList.

ConciseBody : ExpressionBody

1. Верните новый пустой Список.

AsyncConciseBody : ExpressionBody

1. Верните новый пустой Список.

Script : [empty]

1. Верните новый пустой Список.

ScriptBody : StatementList

1. Верните TopLevelVarScopedDeclarations из списка StatementList.

Module : [empty]

1. Верните новый пустой Список.

ModuleItemList : ModuleItemList ModuleItem

1. Пусть declarations1 будут VarScopedDeclarations для ModuleItemList.
2. Пусть declarations2 будут VarScopedDeclarations для ModuleItem.
3. Вернуть объединение списков declarations1 и declarations2.

ModuleItem : ImportDeclaration

1. Верните новый пустой Список.

ModuleItem : ExportDeclaration

1. Если ExportDeclaration является export VariableStatement, вернуть VarScopedDeclarations из VariableStatement.
2. Верните новый пустой Список.

 

8.1.8 Статическая семантика: TopLevelLexicallyDeclaredNames (Лексически декларируемые имена верхнего уровня)

StatementList : StatementList StatementListItem

1. Пусть names1 будет TopLevelLexicallyDeclaredNames из StatementList.
2. Пусть names2 будет TopLevelLexicallyDeclaredNames из StatementListItem.
3. Вернуть конкатенацию списка из names1 и names2.

StatementListItem : Statement

1. Верните новый пустой Список.

StatementListItem : Declaration

1. Если Declaration является Declaration : HoistableDeclaration, то
   а. Вернуть " ".
2. Верните BoundNames из Declaration.

 

8.1.9 Статическая семантика: TopLevelLexicallyScopedDeclarations (Объявления верхнего уровня с лексической областью видимости)

StatementList : StatementList StatementListItem

1. Пусть declarations1 будут TopLevelLexicallyScopedDeclarations из StatementList.
2. Пусть declarations2 будут TopLevelLexicallyScopedDeclarations из StatementListItem.
3. Вернуть конкатенацию списков declarations1 и declarations2.

StatementListItem : Statement

1. Верните новый пустой Список.

StatementListItem : Declaration

1. Если Declaration является Declaration : HoistableDeclaration, то
   а. Вернуть " ".
2. Вернуть Список, единственным элементом которого является Declaration.

 

8.1.10 Статическая семантика: TopLevelVarDeclaredNames (Объявленные имена переменных Var верхнего уровня)

StatementList : StatementList StatementListItem

1. Пусть names1 будет TopLevelVarDeclaredNames из StatementList.
2. Пусть names2 будет TopLevelVarDeclaredNames из StatementListItem.
3. Вернуть конкатенацию списка names1 и names2.

StatementListItem : Declaration

1. Если Declaration является Declaration : HoistableDeclaration, то
   а. Верните BoundNames из HoistableDeclaration.
2. Верните новый пустой Список.

StatementListItem : Statement

1. Если Statement является Statement : LabelledStatement, верните TopLevelVarDeclaredNames из Statement.
2. Верните VarDeclaredNames из Statement.
Примечание

На верхнем уровне функции или скрипта объявления внутренних функций обрабатываются как объявления var.

LabelledStatement : LabelIdentifier : LabelledItem

1. Верните TopLevelVarDeclaredNames для LabelledItem.

LabelledItem : Statement

1. Если Statement является Statement : LabelledStatement, верните TopLevelVarDeclaredNames из Statement.
2. Верните VarDeclaredNames из Statement.

LabelledItem : FunctionDeclaration

1. Верните BoundNames из FunctionDeclaration.

 

8.1.11 Статическая семантика: TopLevelVarScopedDeclarations (Объявления верхнего уровня с областью видимости Var)

StatementList : StatementList StatementListItem

1. Пусть объявления declarations1 будут TopLevelVarScopedDeclarations из StatementList.
2. Пусть объявления declarations2 будут TopLevelVarScopedDeclarations из StatementListItem.
3. Верните конкатенацию списков из declarations1 и declarations2.

StatementListItem : Statement

1. Если Statement является Statement : LabelledStatement, верните TopLevelVarScopedDeclarations из Statement.
2. Верните VarScopedDeclarations из Statement.

StatementListItem : Declaration

1. Если Declaration является Declaration : HoistableDeclaration, то
  а. Пусть declaration будет DeclarationPart из HoistableDeclaration.
  b. Верните «declaration».
2. Верните новый пустой Список.

LabelledStatement : LabelIdentifier : LabelledItem

1. Верните TopLevelVarScopedDeclarations для LabelledItem.

LabelledItem : Statement

1. Если Statement является Statement : LabelledStatement, верните TopLevelVarScopedDeclarations из Statement.
2. Верните VarScopedDeclarations из Statement.

LabelledItem : FunctionDeclaration

1. Верните Список, единственным элементом которого является FunctionDeclaration.

 

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

Стандарт ECMAScript — Раздел «8.1 Scope Analysis» — https://tc39.es/ecma262/#sec-syntax-directed-operations-scope-analysis