switch . case default .
switch - , , ES2016. , , , , . , .
-, switch :
SwitchStatement:
switch ( Expression ) CaseBlock
CaseBlock:
CaseBlock:
{ CaseClauses }
{ CaseClauses DefaultClause CaseClauses }
CaseClauses:
CaseClause
CaseClauses CaseClause
CaseClause:
case Expression : StatementList
DefaultClause:
default : StatementList
, CaseBlock switch (, ).
, , CaseBlock, , .
CaseBlock Scope
13.2.14 : BlockDeclarationInstantiation (code, env), , CaseBlock .
Block CaseBlock, , , , , .
CaseBlock switch, , switch ( let/const).
CaseClause ( )
, 13.12.6 : LexicallyScopedDeclarations, , . ( ):
CaseBlock: {CaseClauses DefaultClause CaseClauses}
- CaseClauses, LexicalScopedDeclarations CaseClauses.
- Else let .
- LexicallyScopedDeclarations DefaultClause.
- CaseClauses , .
- Else LexicalScopedDeclarations caseClaus.
CaseClauses: CaseClauses CaseClause
- LexicallyScopedDeclarations caseClauses.
- LexicalScopedDeclarations CaseClause.
- .
CaseClause: case Expression: StatementList
- StatementList, LexicallyScopedDeclarations StatementList.
- Else .
DefaultClause: default: StatementList
- StatementList, LexicallyScopedDeclarations StatementList.
- Else .
, , , caseClause LexicallyScopedDeclarations. DefaultClause CaseClause, . .
A CaseClause declarations, . , , .
, , CaseClause, , CaseClause , .
:
, 13.12.11 :
SwitchStatement: () CaseBlock
- exprRef - .
- switchValue ? (exprRef).
- oldEnv - LexicalEnvironment.
- blockEnv NewDeclarativeEnvironment (oldEnv).
- BlockDeclarationInstantiation (CaseBlock, blockEnv).
- LexicalEnvironment blockEnv.
- R - CaseBlockEvaluation CaseBlock switchValue.
- LexicalEnvironment oldEnv.
- R.
4 5, CaseBlock . 13.12.11, CaseClause CaseBlock .
CaseClause: case Expression: StatementList
, . A CaseBlock . A CaseClause ( CaseClause).