← ECMAScript 2027 · İçindekiler
ECMA-262 · 18inci Baskı
14

ECMAScript Dili: Deyimler ve Bildirimler

Sözdizimi

Statement Statement[Yield, Await, Return] : BlockStatement[?Yield, ?Await, ?Return] VariableStatement[?Yield, ?Await] EmptyStatement ExpressionStatement[?Yield, ?Await] IfStatement[?Yield, ?Await, ?Return] BreakableStatement[?Yield, ?Await, ?Return] ContinueStatement[?Yield, ?Await] BreakStatement[?Yield, ?Await] [+Return] ReturnStatement[?Yield, ?Await] WithStatement[?Yield, ?Await, ?Return] LabelledStatement[?Yield, ?Await, ?Return] ThrowStatement[?Yield, ?Await] TryStatement[?Yield, ?Await, ?Return] DebuggerStatement

Declaration Declaration[Yield, Await] : HoistableDeclaration[?Yield, ?Await, ~Default] ClassDeclaration[?Yield, ?Await, ~Default] LexicalDeclaration[+In, ?Yield, ?Await]

HoistableDeclaration HoistableDeclaration[Yield, Await, Default] : FunctionDeclaration[?Yield, ?Await, ?Default] GeneratorDeclaration[?Yield, ?Await, ?Default] AsyncFunctionDeclaration[?Yield, ?Await, ?Default] AsyncGeneratorDeclaration[?Yield, ?Await, ?Default]

BreakableStatement BreakableStatement[Yield, Await, Return] : IterationStatement[?Yield, ?Await, ?Return] SwitchStatement[?Yield, ?Await, ?Return]

14.1 Deyim Anlambilimi

14.1.1 Çalışma Zamanı Anlambilimi: Değerlendirme

HoistableDeclaration HoistableDeclaration : GeneratorDeclaration AsyncFunctionDeclaration AsyncGeneratorDeclaration

  1. empty döndür.

HoistableDeclaration HoistableDeclaration : FunctionDeclaration

  1. ? FunctionDeclaration'ın Evaluation değerini döndür.

BreakableStatement BreakableStatement : IterationStatement SwitchStatement

  1. newLabelSet yeni ve boş bir Liste olsun.

  2. Bu BreakableStatement'in newLabelSet argümanıyla ? LabelledEvaluation değerini döndür.

14.2 Blok

Sözdizimi

BlockStatement BlockStatement[Yield, Await, Return] : Block[?Yield, ?Await, ?Return]

Block Block[Yield, Await, Return] : { StatementList[?Yield, ?Await, ?Return]opt }

StatementList StatementList[Yield, Await, Return] : StatementListItem[?Yield, ?Await, ?Return] StatementList[?Yield, ?Await, ?Return] StatementListItem[?Yield, ?Await, ?Return]

StatementListItem StatementListItem[Yield, Await, Return] : Statement[?Yield, ?Await, ?Return] Declaration[?Yield, ?Await]

14.2.1 Statik Anlambilim: Erken Hatalar

Block Block : { StatementList }

14.2.2 Çalışma Zamanı Anlambilimi: Değerlendirme

Block Block : { }

  1. empty döndür.

Block Block : { StatementList }

  1. oldEnv, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  2. blockEnv = NewDeclarativeEnvironment(oldEnv) olsun.

  3. BlockDeclarationInstantiation(StatementList, blockEnv) işlemini gerçekleştir.

  4. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını blockEnv olarak ayarla.

  5. blockValue = Completion(StatementList'in Evaluation değeri) olsun.

  6. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını oldEnv olarak ayarla.

  7. ? blockValue döndür.

StatementList StatementList : StatementList StatementListItem

  1. sl = ? Evaluation(StatementList) olsun.

  2. s = Completion(StatementListItem'in Evaluation değeri) olsun.

  3. ? UpdateEmpty(s, sl) döndür.

14.2.3 BlockDeclarationInstantiation ( code, envRecord )

BlockDeclarationInstantiation soyut işlemi code (bir Ayrıştırma Düğümü) ve envRecord (bir Bildirimsel Ortam Kaydı) argümanlarını alır ve unused döndürür. code, bloğun gövdesine karşılık gelen Ayrıştırma Düğümüdür. envRecord, bağlamaların oluşturulacağı Ortam Kaydıdır.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. decls, code'un LexicallyScopedDeclarations değeri olsun.

  2. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  3. decls listesinin her decl öğesi için, do

    1. decl'in BoundNames listesinin her dn öğesi için, do

      1. Eğer decl'in IsConstantDeclaration değeri true ise, o zaman

         1. ! *envRecord*.[CreateImmutableBinding](10_sec-executable-code-and-execution-contexts.md#abstract-createimmutablebinding)(*dn*, `true`) işlemini gerçekleştir.
      2. Değilse,

         1. [Normatif İsteğe Bağlı](03_sec-conformance.md#sec-conformance) Eğer [barındırıcı](05_sec-overview.md#host) bir web tarayıcısıysa ya da [Block-Level Function Declarations Web Legacy Compatibility Semantics](32_sec-additional-ecmascript-features-for-web-browsers.md#sec-block-level-function-declarations-web-legacy-compatibility-semantics)'i başka bir şekilde destekliyorsa, o zaman
           
                   1. Eğer ! *envRecord*.[HasBinding](10_sec-executable-code-and-execution-contexts.md#abstract-hasbinding)(*dn*) `false` ise, o zaman
                     
                               1. ! *envRecord*.[CreateMutableBinding](10_sec-executable-code-and-execution-contexts.md#abstract-createmutablebinding)(*dn*, `false`) işlemini gerçekleştir.
        
         2. Değilse,
           
                   1. ! *envRecord*.[CreateMutableBinding](10_sec-executable-code-and-execution-contexts.md#abstract-createmutablebinding)(*dn*, `false`) işlemini gerçekleştir.
    2. Eğer decl bir FunctionDeclaration, bir GeneratorDeclaration, bir AsyncFunctionDeclaration veya bir AsyncGeneratorDeclaration ise, o zaman

      1. func, decl'in BoundNames listesinin tek öğesi olsun.

      2. funcObj, decl'in envRecord ve privateEnv argümanlarıyla InstantiateFunctionObject değeri olsun.

      3. Normatif İsteğe Bağlı Eğer barındırıcı bir web tarayıcısıysa ya da Block-Level Function Declarations Web Legacy Compatibility Semantics'i başka bir şekilde destekliyorsa, o zaman

         1. Eğer *envRecord* içindeki *func* bağlaması ilklendirilmemiş bir bağlamaysa, o zaman
           
                   1. ! *envRecord*.[InitializeBinding](10_sec-executable-code-and-execution-contexts.md#abstract-initializebinding)(*func*, *funcObj*) işlemini gerçekleştir.
        
         2. Değilse,
           
                   1. [Assert](06_sec-notational-conventions.md#assert): *decl* bir *[FunctionDeclaration](16_sec-ecmascript-language-functions-and-classes.md#prod-FunctionDeclaration)*'dır.
           
                   2. ! *envRecord*.[SetMutableBinding](10_sec-executable-code-and-execution-contexts.md#abstract-setmutablebinding)(*func*, *funcObj*, `false`) işlemini gerçekleştir.
      4. Değilse,

         1. ! *envRecord*.[InitializeBinding](10_sec-executable-code-and-execution-contexts.md#abstract-initializebinding)(*func*, *funcObj*) işlemini gerçekleştir.
  4. unused döndür.

14.3 Bildirimler ve Variable Deyimi

14.3.1 Let ve Const Bildirimleri

Sözdizimi

LexicalDeclaration LexicalDeclaration[In, Yield, Await] : LetOrConst BindingList[?In, ?Yield, ?Await] ;

LetOrConst LetOrConst : let const

BindingList BindingList[In, Yield, Await] : LexicalBinding[?In, ?Yield, ?Await] BindingList[?In, ?Yield, ?Await] , LexicalBinding[?In, ?Yield, ?Await]

LexicalBinding LexicalBinding[In, Yield, Await] : BindingIdentifier[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]opt BindingPattern[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]

14.3.1.1 Statik Anlambilim: Erken Hatalar

LexicalDeclaration LexicalDeclaration : LetOrConst BindingList ;

LexicalBinding LexicalBinding : BindingIdentifier Initializeropt

14.3.1.2 Çalışma Zamanı Anlambilimi: Değerlendirme

LexicalDeclaration LexicalDeclaration : LetOrConst BindingList ;

  1. BindingList'in ? Evaluation işlemini gerçekleştir.

  2. empty döndür.

BindingList BindingList : BindingList , LexicalBinding

  1. BindingList'in ? Evaluation işlemini gerçekleştir.

  2. LexicalBinding'in ? Evaluation değerini döndür.

LexicalBinding LexicalBinding : BindingIdentifier

  1. lhs = ! ResolveBinding(BindingIdentifier'ın StringValue değeri) olsun.

  2. ! InitializeReferencedBinding(lhs, undefined) işlemini gerçekleştir.

  3. empty döndür.

LexicalBinding LexicalBinding : BindingIdentifier Initializer

  1. bindingId, BindingIdentifier'ın StringValue değeri olsun.

  2. lhs = ! ResolveBinding(bindingId) olsun.

  3. Eğer IsAnonymousFunctionDefinition(Initializer) true ise, o zaman

    1. value = ? Initializer'ın bindingId argümanıyla NamedEvaluation değeri olsun.
  4. Değilse,

    1. rhs = ? Evaluation(Initializer) olsun.

    2. value = ? GetValue(rhs) olsun.

  5. ! InitializeReferencedBinding(lhs, value) işlemini gerçekleştir.

  6. empty döndür.

LexicalBinding LexicalBinding : BindingPattern Initializer

  1. rhs = ? Evaluation(Initializer) olsun.

  2. value = ? GetValue(rhs) olsun.

  3. envRecord, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  4. BindingPattern'ın value ve envRecord argümanlarıyla ? BindingInitialization değerini döndür.

14.3.2 Variable Deyimi

Sözdizimi

VariableStatement VariableStatement[Yield, Await] : var VariableDeclarationList[+In, ?Yield, ?Await] ;

VariableDeclarationList VariableDeclarationList[In, Yield, Await] : VariableDeclaration[?In, ?Yield, ?Await] VariableDeclarationList[?In, ?Yield, ?Await] , VariableDeclaration[?In, ?Yield, ?Await]

VariableDeclaration VariableDeclaration[In, Yield, Await] : BindingIdentifier[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]opt BindingPattern[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]

14.3.2.1 Çalışma Zamanı Anlambilimi: Değerlendirme

VariableStatement VariableStatement : var VariableDeclarationList ;

  1. VariableDeclarationList'in ? Evaluation işlemini gerçekleştir.

  2. empty döndür.

VariableDeclarationList VariableDeclarationList : VariableDeclarationList , VariableDeclaration

  1. VariableDeclarationList'in ? Evaluation işlemini gerçekleştir.

  2. VariableDeclaration'ın ? Evaluation değerini döndür.

VariableDeclaration VariableDeclaration : BindingIdentifier

  1. empty döndür.

VariableDeclaration VariableDeclaration : BindingIdentifier Initializer

  1. bindingId, BindingIdentifier'ın StringValue değeri olsun.

  2. lhs = ? ResolveBinding(bindingId) olsun.

  3. Eğer IsAnonymousFunctionDefinition(Initializer) true ise, o zaman

    1. value = ? Initializer'ın bindingId argümanıyla NamedEvaluation değeri olsun.
  4. Değilse,

    1. rhs = ? Evaluation(Initializer) olsun.

    2. value = ? GetValue(rhs) olsun.

  5. ? PutValue(lhs, value) işlemini gerçekleştir.

  6. empty döndür.

VariableDeclaration VariableDeclaration : BindingPattern Initializer

  1. rhs = ? Evaluation(Initializer) olsun.

  2. rightValue = ? GetValue(rhs) olsun.

  3. BindingPattern'ın rightValue ve undefined argümanlarıyla ? BindingInitialization değerini döndür.

14.3.3 Destructuring Bağlama Desenleri

Sözdizimi

BindingPattern BindingPattern[Yield, Await] : ObjectBindingPattern[?Yield, ?Await] ArrayBindingPattern[?Yield, ?Await]

ObjectBindingPattern ObjectBindingPattern[Yield, Await] : { } { BindingRestProperty[?Yield, ?Await] } { BindingPropertyList[?Yield, ?Await] } { BindingPropertyList[?Yield, ?Await] , BindingRestProperty[?Yield, ?Await]opt }

ArrayBindingPattern ArrayBindingPattern[Yield, Await] : [ Elisionopt BindingRestElement[?Yield, ?Await]opt ] [ BindingElementList[?Yield, ?Await] ] [ BindingElementList[?Yield, ?Await] , Elisionopt BindingRestElement[?Yield, ?Await]opt ]

BindingRestProperty BindingRestProperty[Yield, Await] : ... BindingIdentifier[?Yield, ?Await]

BindingPropertyList BindingPropertyList[Yield, Await] : BindingProperty[?Yield, ?Await] BindingPropertyList[?Yield, ?Await] , BindingProperty[?Yield, ?Await]

BindingElementList BindingElementList[Yield, Await] : BindingElisionElement[?Yield, ?Await] BindingElementList[?Yield, ?Await] , BindingElisionElement[?Yield, ?Await]

BindingElisionElement BindingElisionElement[Yield, Await] : Elisionopt BindingElement[?Yield, ?Await]

BindingProperty BindingProperty[Yield, Await] : SingleNameBinding[?Yield, ?Await] PropertyName[?Yield, ?Await] : BindingElement[?Yield, ?Await]

BindingElement BindingElement[Yield, Await] : SingleNameBinding[?Yield, ?Await] BindingPattern[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]opt

SingleNameBinding SingleNameBinding[Yield, Await] : BindingIdentifier[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]opt

BindingRestElement BindingRestElement[Yield, Await] : ... BindingIdentifier[?Yield, ?Await] ... BindingPattern[?Yield, ?Await]

14.3.3.1 Çalışma Zamanı Anlambilimi: PropertyBindingInitialization

Sözdizimi yönelimli işlem PropertyBindingInitialization, value (bir ECMAScript dil değeri) ve envRecord (bir Ortam Kaydı veya undefined) argümanlarını alır ve ya özellik anahtarlarının bir Listesini içeren bir normal tamamlanma ya da bir ani tamamlanma döndürür. Bağlı tüm özellik adlarının bir listesini toplar. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

BindingPropertyList BindingPropertyList : BindingPropertyList , BindingProperty

  1. boundNames = ? BindingPropertyList'in value ve envRecord argümanlarıyla PropertyBindingInitialization değeri olsun.

  2. nextNames = ? BindingProperty'in value ve envRecord argümanlarıyla PropertyBindingInitialization değeri olsun.

  3. boundNames ve nextNames'in liste birleştirmesini döndür.

BindingProperty BindingProperty : SingleNameBinding

  1. name, SingleNameBinding'in BoundNames listesinin tek öğesi olsun.

  2. ? SingleNameBinding'in value, envRecord ve name argümanlarıyla KeyedBindingInitialization işlemini gerçekleştir.

  3. « name » döndür.

BindingProperty BindingProperty : PropertyName : BindingElement

  1. propertyKey = ? Evaluation(PropertyName) olsun.

  2. ? BindingElement'in value, envRecord ve propertyKey argümanlarıyla KeyedBindingInitialization işlemini gerçekleştir.

  3. « propertyKey » döndür.

14.3.3.2 Çalışma Zamanı Anlambilimi: RestBindingInitialization

Sözdizimi yönelimli işlem RestBindingInitialization, value (bir ECMAScript dil değeri), envRecord (bir Ortam Kaydı veya undefined) ve excludedNames (özellik anahtarlarından oluşan bir Liste) argümanlarını alır ve ya unused içeren bir normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

BindingRestProperty BindingRestProperty : ... BindingIdentifier

  1. lhs = ? ResolveBinding(BindingIdentifier'ın StringValue değeri, envRecord) olsun.

  2. restObj = OrdinaryObjectCreate(%Object.prototype%) olsun.

  3. ? CopyDataProperties(restObj, value, excludedNames) işlemini gerçekleştir.

  4. Eğer envRecord undefined ise, ? PutValue(lhs, restObj) döndür.

  5. ? InitializeReferencedBinding(lhs, restObj) döndür.

14.3.3.3 Çalışma Zamanı Anlambilimi: KeyedBindingInitialization

Sözdizimi yönelimli işlem KeyedBindingInitialization, value (bir ECMAScript dil değeri), envRecord (bir Ortam Kaydı veya undefined) ve propertyName (bir özellik anahtarı) argümanlarını alır ve ya unused içeren bir normal tamamlanma ya da bir ani tamamlanma döndürür.

Aşağıdaki üretimler üzerinden parça parça tanımlanır:

BindingElement BindingElement : BindingPattern Initializeropt

  1. value = ? GetV(value, propertyName) olarak ayarla.

  2. Eğer Initializer mevcutsa ve value undefined ise, o zaman

    1. defaultValue = ? Evaluation(Initializer) olsun.

    2. value = ? GetValue(defaultValue) olarak ayarla.

  3. ? BindingPattern'ın value ve envRecord argümanlarıyla BindingInitialization değerini döndür.

SingleNameBinding SingleNameBinding : BindingIdentifier Initializeropt

  1. bindingId, BindingIdentifier'ın StringValue değeri olsun.

  2. lhs = ? ResolveBinding(bindingId, envRecord) olsun.

  3. value = ? GetV(value, propertyName) olarak ayarla.

  4. Eğer Initializer mevcutsa ve value undefined ise, o zaman

    1. Eğer IsAnonymousFunctionDefinition(Initializer) true ise, o zaman

      1. value = ? Initializer'ın bindingId argümanıyla NamedEvaluation değeri olarak ayarla.
    2. Değilse,

      1. defaultValue = ? Evaluation(Initializer) olsun.

      2. value = ? GetValue(defaultValue) olarak ayarla.

  5. Eğer envRecord undefined ise, ? PutValue(lhs, value) döndür.

  6. ? InitializeReferencedBinding(lhs, value) döndür.

14.4 Boş Deyim

Sözdizimi

EmptyStatement EmptyStatement : ;

14.4.1 Çalışma Zamanı Anlambilimi: Değerlendirme

EmptyStatement EmptyStatement : ;

  1. empty döndür.

14.5 İfade Deyimi

Sözdizimi

ExpressionStatement ExpressionStatement[Yield, Await] : [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }] Expression[+In, ?Yield, ?Await] ;

14.5.1 Çalışma Zamanı Anlambilimi: Değerlendirme

ExpressionStatement ExpressionStatement : Expression ;

  1. exprRef = ? Evaluation(Expression) olsun.

  2. ? GetValue(exprRef) döndür.

14.6 if Deyimi

Sözdizimi

IfStatement IfStatement[Yield, Await, Return] : if ( Expression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return] else Statement[?Yield, ?Await, ?Return] if ( Expression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return] [lookahead ≠ else]

14.6.1 Statik Anlambilim: Erken Hatalar

IfStatement IfStatement : if ( Expression ) Statement else Statement

IfStatement IfStatement : if ( Expression ) Statement

14.6.2 Çalışma Zamanı Anlambilimi: Değerlendirme

IfStatement IfStatement : if ( Expression ) Statement else Statement

  1. exprRef = ? Evaluation(Expression) olsun.

  2. exprValue = ToBoolean(? GetValue(exprRef)) olsun.

  3. Eğer exprValue true ise, o zaman

    1. stmtCompletion = Completion(ilk Statement'in Evaluation değeri) olsun.
  4. Değilse,

    1. stmtCompletion = Completion(ikinci Statement'in Evaluation değeri) olsun.
  5. ? UpdateEmpty(stmtCompletion, undefined) döndür.

IfStatement IfStatement : if ( Expression ) Statement

  1. exprRef = ? Evaluation(Expression) olsun.

  2. exprValue = ToBoolean(? GetValue(exprRef)) olsun.

  3. Eğer exprValue false ise, undefined döndür.

  4. stmtCompletion = Completion(Statement'in Evaluation değeri) olsun.

  5. ? UpdateEmpty(stmtCompletion, undefined) döndür.

14.7 Yineleme Deyimleri

Sözdizimi

IterationStatement IterationStatement[Yield, Await, Return] : DoWhileStatement[?Yield, ?Await, ?Return] WhileStatement[?Yield, ?Await, ?Return] ForStatement[?Yield, ?Await, ?Return] ForInOfStatement[?Yield, ?Await, ?Return]

14.7.1 Anlambilim

14.7.1.1 LoopContinues ( completion, labelSet )

LoopContinues soyut işlemi completion (bir Completion Record) ve labelSet (String'lerden oluşan bir Liste) argümanlarını alır ve bir Boolean döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer completion bir normal tamamlanma ise, true döndür.

  2. Eğer completion bir continue tamamlanması değilse, false döndür.

  3. Eğer completion.[[Target]] empty ise, true döndür.

  4. Eğer labelSet, completion.[[Target]] içeriyorsa, true döndür.

  5. false döndür.

14.7.1.2 Çalışma Zamanı Anlambilimi: LoopEvaluation

Sözdizimi yönelimli işlem LoopEvaluation, labelSet (String'lerden oluşan bir Liste) argümanını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

IterationStatement IterationStatement : DoWhileStatement

  1. ? DoWhileStatement'in labelSet argümanıyla DoWhileLoopEvaluation değerini döndür.

IterationStatement IterationStatement : WhileStatement

  1. ? WhileStatement'in labelSet argümanıyla WhileLoopEvaluation değerini döndür.

IterationStatement IterationStatement : ForStatement

  1. ? ForStatement'in labelSet argümanıyla ForLoopEvaluation değerini döndür.

IterationStatement IterationStatement : ForInOfStatement

  1. ? ForInOfStatement'in labelSet argümanıyla ForInOfLoopEvaluation değerini döndür.

14.7.2 do-while Deyimi

Sözdizimi

DoWhileStatement DoWhileStatement[Yield, Await, Return] : do Statement[?Yield, ?Await, ?Return] while ( Expression[+In, ?Yield, ?Await] ) ;

14.7.2.1 Statik Anlambilim: Erken Hatalar

DoWhileStatement DoWhileStatement : do Statement while ( Expression ) ;

14.7.2.2 Çalışma Zamanı Anlambilimi: DoWhileLoopEvaluation

Sözdizimi yönelimli işlem DoWhileLoopEvaluation, labelSet (String'lerden oluşan bir Liste) argümanını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

DoWhileStatement DoWhileStatement : do Statement while ( Expression ) ;

  1. iterationResult undefined olsun.

  2. Tekrar et,

    1. stmtResult = Completion(Evaluation(Statement)) olsun.

    2. Eğer LoopContinues(stmtResult, labelSet) false ise, ? UpdateEmpty(stmtResult, iterationResult) döndür.

    3. Eğer stmtResult.[[Value]] empty değilse, iterationResultstmtResult.[[Value]] olarak ayarla.

    4. exprRef = ? Evaluation(Expression) olsun.

    5. exprValue = ? GetValue(exprRef) olsun.

    6. Eğer ToBoolean(exprValue) false ise, iterationResult döndür.

14.7.3 while Deyimi

Sözdizimi

WhileStatement WhileStatement[Yield, Await, Return] : while ( Expression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return]

14.7.3.1 Statik Anlambilim: Erken Hatalar

WhileStatement WhileStatement : while ( Expression ) Statement

14.7.3.2 Çalışma Zamanı Anlambilimi: WhileLoopEvaluation

Sözdizimi yönelimli işlem WhileLoopEvaluation, labelSet (String'lerden oluşan bir Liste) argümanını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

WhileStatement WhileStatement : while ( Expression ) Statement

  1. iterationResult undefined olsun.

  2. Tekrar et,

    1. exprRef = ? Evaluation(Expression) olsun.

    2. exprValue = ? GetValue(exprRef).

    3. Eğer ToBoolean(exprValue) false ise, iterationResult döndür.

    4. stmtResult = Completion(Evaluation(Statement)) olsun.

    5. Eğer LoopContinues(stmtResult, labelSet) false ise, ? UpdateEmpty(stmtResult, iterationResult) döndür.

    6. Eğer stmtResult.[[Value]] empty değilse, iterationResultstmtResult.[[Value]] olarak ayarla.

14.7.4 for Deyimi

Sözdizimi

ForStatement ForStatement[Yield, Await, Return] : for ( [lookahead ≠ let [] Expression[~In, ?Yield, ?Await]opt ; Expression[+In, ?Yield, ?Await]opt ; Expression[+In, ?Yield, ?Await]opt ) Statement[?Yield, ?Await, ?Return] for ( var VariableDeclarationList[~In, ?Yield, ?Await] ; Expression[+In, ?Yield, ?Await]opt ; Expression[+In, ?Yield, ?Await]opt ) Statement[?Yield, ?Await, ?Return] for ( LexicalDeclaration[~In, ?Yield, ?Await] Expression[+In, ?Yield, ?Await]opt ; Expression[+In, ?Yield, ?Await]opt ) Statement[?Yield, ?Await, ?Return]

14.7.4.1 Statik Anlambilim: Erken Hatalar

ForStatement ForStatement : for ( Expressionopt ; Expressionopt ; Expressionopt ) Statement for ( var VariableDeclarationList ; Expressionopt ; Expressionopt ) Statement for ( LexicalDeclaration Expressionopt ; Expressionopt ) Statement

ForStatement ForStatement : for ( LexicalDeclaration Expressionopt ; Expressionopt ) Statement

14.7.4.2 Çalışma Zamanı Anlambilimi: ForLoopEvaluation

Sözdizimi yönelimli işlem ForLoopEvaluation, labelSet (String'lerden oluşan bir Liste) argümanını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ForStatement ForStatement : for ( Expressionopt ; Expressionopt ; Expressionopt ) Statement

  1. Eğer ilk Expression mevcutsa, o zaman

    1. exprRef = ? Evaluation(ilk Expression'ın değeri) olsun.

    2. ? GetValue(exprRef) işlemini gerçekleştir.

  2. Eğer ikinci Expression mevcutsa, test ikinci Expression olsun; değilse test empty olsun.

  3. Eğer üçüncü Expression mevcutsa, increment üçüncü Expression olsun; değilse increment empty olsun.

  4. ? ForBodyEvaluation(test, increment, Statement, « », labelSet) döndür.

ForStatement ForStatement : for ( var VariableDeclarationList ; Expressionopt ; Expressionopt ) Statement

  1. ? Evaluation(VariableDeclarationList) işlemini gerçekleştir.

  2. Eğer ilk Expression mevcutsa, test ilk Expression olsun; değilse test empty olsun.

  3. Eğer ikinci Expression mevcutsa, increment ikinci Expression olsun; değilse increment empty olsun.

  4. ? ForBodyEvaluation(test, increment, Statement, « », labelSet) döndür.

ForStatement ForStatement : for ( LexicalDeclaration Expressionopt ; Expressionopt ) Statement

  1. oldEnv, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  2. loopEnv = NewDeclarativeEnvironment(oldEnv) olsun.

  3. isConst, LexicalDeclaration'ın IsConstantDeclaration değeri olsun.

  4. boundNames, LexicalDeclaration'ın BoundNames değeri olsun.

  5. boundNames listesinin her dn öğesi için, do

    1. Eğer isConst true ise, o zaman

      1. ! loopEnv.CreateImmutableBinding(dn, true) işlemini gerçekleştir.
    2. Değilse,

      1. ! loopEnv.CreateMutableBinding(dn, false) işlemini gerçekleştir.
  6. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını loopEnv olarak ayarla.

  7. forDecl = Completion(Evaluation(LexicalDeclaration)) olsun.

  8. Eğer forDecl bir ani tamamlanmaysa, o zaman

    1. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını oldEnv olarak ayarla.

    2. ? forDecl döndür.

  9. Eğer isConst false ise, perIterationLets boundNames olsun; değilse perIterationLets yeni ve boş bir Liste olsun.

  10. Eğer ilk Expression mevcutsa, test ilk Expression olsun; değilse test empty olsun.

  11. Eğer ikinci Expression mevcutsa, increment ikinci Expression olsun; değilse increment empty olsun.

  12. bodyResult = Completion(ForBodyEvaluation(test, increment, Statement, perIterationLets, labelSet)) olsun.

  13. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını oldEnv olarak ayarla.

  14. ? bodyResult döndür.

14.7.4.3 ForBodyEvaluation ( test, increment, stmt, perIterationBindings, labelSet )

Soyut işlem ForBodyEvaluation test (bir Expression Ayrıştırma Düğümü veya empty), increment (bir Expression Ayrıştırma Düğümü veya empty), stmt (bir Statement Ayrıştırma Düğümü), perIterationBindings (String'lerden oluşan bir Liste) ve labelSet (String'lerden oluşan bir Liste) argümanlarını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir ani tamamlanma döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. iterationResult undefined olsun.

  2. ? CreatePerIterationEnvironment(perIterationBindings) işlemini gerçekleştir.

  3. Tekrar et,

    1. Eğer test empty değilse, o zaman

      1. testRef = ? Evaluation(test) olsun.

      2. testValue = ? GetValue(testRef) olsun.

      3. Eğer ToBoolean(testValue) false ise, iterationResult döndür.

    2. result = Completion(Evaluation(stmt)) olsun.

    3. Eğer LoopContinues(result, labelSet) false ise, ? UpdateEmpty(result, iterationResult) döndür.

    4. Eğer result.[[Value]] empty değilse, iterationResultresult.[[Value]] olarak ayarla.

    5. ? CreatePerIterationEnvironment(perIterationBindings) işlemini gerçekleştir.

    6. Eğer increment empty değilse, o zaman

      1. incRef = ? Evaluation(increment) olsun.

      2. ? GetValue(incRef) işlemini gerçekleştir.

14.7.4.4 CreatePerIterationEnvironment ( perIterationBindings )

Soyut işlem CreatePerIterationEnvironment perIterationBindings (String'lerden oluşan bir Liste) argümanını alır ve ya unused içeren bir normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer perIterationBindings herhangi bir öğeye sahipse, o zaman

    1. lastIterationEnv, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

    2. outer, lastIterationEnv.[[OuterEnv]] olsun.

    3. Assert: outer null değildir.

    4. thisIterationEnv = NewDeclarativeEnvironment(outer) olsun.

    5. perIterationBindings listesinin her bn öğesi için, do

      1. ! thisIterationEnv.CreateMutableBinding(bn, false) işlemini gerçekleştir.

      2. lastValue = ? lastIterationEnv.GetBindingValue(bn, true) olsun.

      3. ! thisIterationEnv.InitializeBinding(bn, lastValue) işlemini gerçekleştir.

    6. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını thisIterationEnv olarak ayarla.

  2. unused döndür.

14.7.5 for-in, for-of ve for-await-of Deyimleri

Sözdizimi

ForInOfStatement ForInOfStatement[Yield, Await, Return] : for ( [lookahead ≠ let [] LeftHandSideExpression[?Yield, ?Await] in Expression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return] for ( var ForBinding[?Yield, ?Await] in Expression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return] for ( ForDeclaration[?Yield, ?Await] in Expression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return] for ( [lookahead ∉ { let, async of }] LeftHandSideExpression[?Yield, ?Await] of AssignmentExpression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return] for ( var ForBinding[?Yield, ?Await] of AssignmentExpression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return] for ( ForDeclaration[?Yield, ?Await] of AssignmentExpression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return] [+Await] for await ( [lookahead ≠ let] LeftHandSideExpression[?Yield, ?Await] of AssignmentExpression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return] [+Await] for await ( var ForBinding[?Yield, ?Await] of AssignmentExpression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return] [+Await] for await ( ForDeclaration[?Yield, ?Await] of AssignmentExpression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return]

ForDeclaration ForDeclaration[Yield, Await] : LetOrConst ForBinding[?Yield, ?Await]

ForBinding ForBinding[Yield, Await] : BindingIdentifier[?Yield, ?Await] BindingPattern[?Yield, ?Await]

14.7.5.1 Statik Anlambilim: Erken Hatalar

ForInOfStatement ForInOfStatement : for ( LeftHandSideExpression in Expression ) Statement for ( var ForBinding in Expression ) Statement for ( ForDeclaration in Expression ) Statement for ( LeftHandSideExpression of AssignmentExpression ) Statement for ( var ForBinding of AssignmentExpression ) Statement for ( ForDeclaration of AssignmentExpression ) Statement for await ( LeftHandSideExpression of AssignmentExpression ) Statement for await ( var ForBinding of AssignmentExpression ) Statement for await ( ForDeclaration of AssignmentExpression ) Statement

ForInOfStatement ForInOfStatement : for ( LeftHandSideExpression in Expression ) Statement for ( LeftHandSideExpression of AssignmentExpression ) Statement for await ( LeftHandSideExpression of AssignmentExpression ) Statement

14.7.5.2 Statik Anlambilim: IsDestructuring

Sözdizimi yönelimli işlem IsDestructuring hiçbir argüman almaz ve bir Boolean döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

MemberExpression MemberExpression : PrimaryExpression

  1. Eğer PrimaryExpression ya bir ObjectLiteral ya da bir ArrayLiteral ise, true döndür.

  2. false döndür.

MemberExpression MemberExpression : MemberExpression [ Expression ] MemberExpression . IdentifierName MemberExpression TemplateLiteral SuperProperty MetaProperty new MemberExpression Arguments MemberExpression . PrivateIdentifier

NewExpression NewExpression : new NewExpression

LeftHandSideExpression LeftHandSideExpression : CallExpression OptionalExpression

  1. false döndür.

ForDeclaration ForDeclaration : LetOrConst ForBinding

  1. ForBinding'in IsDestructuring değerini döndür.

ForBinding ForBinding : BindingIdentifier

  1. false döndür.

ForBinding ForBinding : BindingPattern

  1. true döndür.

14.7.5.3 Çalışma Zamanı Anlambilimi: ForDeclarationBindingInitialization

Sözdizimi yönelimli işlem ForDeclarationBindingInitialization value (bir ECMAScript dil değeri) ve envRecord (bir Ortam Kaydı) argümanlarını alır ve ya unused içeren bir normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ForDeclaration ForDeclaration : LetOrConst ForBinding

  1. ForBinding'in value ve envRecord argümanlarıyla ? BindingInitialization değerini döndür.

14.7.5.4 Çalışma Zamanı Anlambilimi: ForDeclarationBindingInstantiation

Sözdizimi yönelimli işlem ForDeclarationBindingInstantiation, envRecord (bir Bildirimsel Ortam Kaydı) argümanını alır ve unused döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ForDeclaration ForDeclaration : LetOrConst ForBinding

  1. ForBinding'in BoundNames listesinin her name öğesi için, do

    1. Eğer LetOrConst'ın IsConstantDeclaration değeri true ise, o zaman

      1. ! envRecord.CreateImmutableBinding(name, true) işlemini gerçekleştir.
    2. Değilse,

      1. ! envRecord.CreateMutableBinding(name, false) işlemini gerçekleştir.
  2. unused döndür.

14.7.5.5 Çalışma Zamanı Anlambilimi: ForInOfLoopEvaluation

Sözdizimi yönelimli işlem ForInOfLoopEvaluation labelSet (String'lerden oluşan bir Liste) argümanını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ForInOfStatement ForInOfStatement : for ( LeftHandSideExpression in Expression ) Statement

  1. keyResult = ? ForIn/OfHeadEvaluation(« », Expression, enumerate) olsun.

  2. ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, keyResult, enumerate, assignment, labelSet) döndür.

ForInOfStatement ForInOfStatement : for ( var ForBinding in Expression ) Statement

  1. keyResult = ? ForIn/OfHeadEvaluation(« », Expression, enumerate) olsun.

  2. ? ForIn/OfBodyEvaluation(ForBinding, Statement, keyResult, enumerate, var-binding, labelSet) döndür.

ForInOfStatement ForInOfStatement : for ( ForDeclaration in Expression ) Statement

  1. keyResult = ? ForIn/OfHeadEvaluation(ForDeclaration'ın BoundNames listesi, Expression, enumerate) olsun.

  2. ? ForIn/OfBodyEvaluation(ForDeclaration, Statement, keyResult, enumerate, lexical-binding, labelSet) döndür.

ForInOfStatement ForInOfStatement : for ( LeftHandSideExpression of AssignmentExpression ) Statement

  1. keyResult = ? ForIn/OfHeadEvaluation(« », AssignmentExpression, iterate) olsun.

  2. ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, keyResult, iterate, assignment, labelSet) döndür.

ForInOfStatement ForInOfStatement : for ( var ForBinding of AssignmentExpression ) Statement

  1. keyResult = ? ForIn/OfHeadEvaluation(« », AssignmentExpression, iterate) olsun.

  2. ? ForIn/OfBodyEvaluation(ForBinding, Statement, keyResult, iterate, var-binding, labelSet) döndür.

ForInOfStatement ForInOfStatement : for ( ForDeclaration of AssignmentExpression ) Statement

  1. keyResult = ? ForIn/OfHeadEvaluation(ForDeclaration'ın BoundNames listesi, AssignmentExpression, iterate) olsun.

  2. ? ForIn/OfBodyEvaluation(ForDeclaration, Statement, keyResult, iterate, lexical-binding, labelSet) döndür.

ForInOfStatement ForInOfStatement : for await ( LeftHandSideExpression of AssignmentExpression ) Statement

  1. keyResult = ? ForIn/OfHeadEvaluation(« », AssignmentExpression, async-iterate) olsun.

  2. ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, keyResult, iterate, assignment, labelSet, async) döndür.

ForInOfStatement ForInOfStatement : for await ( var ForBinding of AssignmentExpression ) Statement

  1. keyResult = ? ForIn/OfHeadEvaluation(« », AssignmentExpression, async-iterate) olsun.

  2. ? ForIn/OfBodyEvaluation(ForBinding, Statement, keyResult, iterate, var-binding, labelSet, async) döndür.

ForInOfStatement ForInOfStatement : for await ( ForDeclaration of AssignmentExpression ) Statement

  1. keyResult = ? ForIn/OfHeadEvaluation(ForDeclaration*'ın BoundNames listesi, AssignmentExpression, async-iterate) olsun.

  2. ? ForIn/OfBodyEvaluation(ForDeclaration, Statement, keyResult, iterate, lexical-binding, labelSet, async) döndür.

14.7.5.6 ForIn/OfHeadEvaluation ( uninitializedBoundNames, expr, iterationKind )

Soyut işlem ForIn/OfHeadEvaluation uninitializedBoundNames (String'lerden oluşan bir Liste), expr (bir Expression Ayrıştırma Düğümü veya bir AssignmentExpression Ayrıştırma Düğümü) ve iterationKind (enumerate, iterate veya async-iterate) argümanlarını alır ve ya bir Iterator Kaydı içeren normal tamamlanma ya da bir ani tamamlanma döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. oldEnv, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  2. Eğer uninitializedBoundNames boş değilse, o zaman

    1. Assert: uninitializedBoundNames yinelenen girdiler içermez.

    2. newEnv = NewDeclarativeEnvironment(oldEnv) olsun.

    3. uninitializedBoundNames listesindeki her name String'i için, do

      1. ! newEnv.CreateMutableBinding(name, false) işlemini gerçekleştir.
    4. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını newEnv olarak ayarla.

  3. exprRef = Completion(Evaluation(expr)) olsun.

  4. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını oldEnv olarak ayarla.

  5. exprValue = ? GetValue(? exprRef) olsun.

  6. Eğer iterationKind enumerate ise, o zaman

    1. Eğer exprValue undefined veya null ise, o zaman

      1. Tamamlanma Kaydı { [[Type]]: break, [[Value]]: empty, [[Target]]: empty } döndür.
    2. obj = ! ToObject(exprValue) olsun.

    3. iterator = EnumerateObjectProperties(obj) olsun.

    4. nextMethod = ! GetV(iterator, "next") olsun.

    5. Iterator Kaydı { [[Iterator]]: iterator, [[NextMethod]]: nextMethod, [[Done]]: false } döndür.

  7. Assert: iterationKind ya iterate ya da async-iterate'dir.

  8. Eğer iterationKind async-iterate ise, iteratorKind async olsun.

  9. Değilse, iteratorKind sync olsun.

  10. ? GetIterator(exprValue, iteratorKind) döndür.

14.7.5.7 ForIn/OfBodyEvaluation ( lhs, stmt, iteratorRecord, iterationKind, lhsKind, labelSet [ , iteratorKind ] )

Soyut işlem ForIn/OfBodyEvaluation lhs (bir Ayrıştırma Düğümü), stmt (bir Statement Ayrıştırma Düğümü), iteratorRecord (bir Iterator Kaydı), iterationKind (enumerate veya iterate), lhsKind (assignment, var-binding veya lexical-binding) ve labelSet (String'lerden oluşan bir Liste) argümanlarını ve isteğe bağlı iteratorKind (sync veya async) argümanını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir ani tamamlanma döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer iteratorKind mevcut değilse, iteratorKindsync olarak ayarla.

  2. oldEnv, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  3. iterationResult undefined olsun.

  4. destructuring, lhs'nin IsDestructuring değeri olsun.

  5. Eğer destructuring true ise ve lhsKind assignment ise, o zaman

    1. Assert: lhs bir LeftHandSideExpression'dır.

    2. assignmentPattern, lhs tarafından kapsanan AssignmentPattern olsun.

  6. Tekrar et,

    1. nextResult = ? Call(iteratorRecord.[[NextMethod]], iteratorRecord.[[Iterator]]) olsun.

    2. Eğer iteratorKind async ise, nextResult'ı ? Await(nextResult) olarak ayarla.

    3. Eğer nextResult bir Nesne değilse, bir TypeError istisnası fırlat.

    4. done = ? IteratorComplete(nextResult) olsun.

    5. Eğer done true ise, iterationResult döndür.

    6. nextValue = ? IteratorValue(nextResult) olsun.

    7. Eğer lhsKind ya assignment ya da var-binding ise, o zaman

      1. Eğer destructuring true ise, o zaman

         1. Eğer *lhsKind* `assignment` ise, o zaman
           
                   1. *status* = [Completion](06_sec-notational-conventions.md#sec-completion-ao)(*[assignmentPattern]*'ın *nextValue* argümanıyla [DestructuringAssignmentEvaluation](14_sec-ecmascript-language-expressions.md#sec-runtime-semantics-destructuringassignmentevaluation) değeri) olsun.
        
         2. Değilse,
           
                   1. [Assert](06_sec-notational-conventions.md#assert): *lhsKind* `var-binding`'dir.
           
                   2. [Assert](06_sec-notational-conventions.md#assert): *lhs* bir *[ForBinding](#prod-ForBinding)*'dir.
           
                   3. *status* = [Completion](06_sec-notational-conventions.md#sec-completion-ao)(*[lhs]*'ın *nextValue* ve `undefined` argümanlarıyla [BindingInitialization](09_sec-syntax-directed-operations.md#sec-runtime-semantics-bindinginitialization) değeri) olsun.
      2. Değilse,

         1. *lhsRef* = [Completion](06_sec-notational-conventions.md#sec-completion-ao)([Evaluation](09_sec-syntax-directed-operations.md#sec-evaluation)(*lhs*)) olsun. (Tekrar tekrar değerlendirilebilir.)
        
         2. Eğer *lhsKind* `assignment` ise ve *lhs*'nin [AssignmentTargetType](09_sec-syntax-directed-operations.md#sec-static-semantics-assignmenttargettype) değeri `web-compat` ise, bir `ReferenceError` istisnası fırlat.
        
         3. Eğer *lhsRef* bir [ani tamamlanmaysa](07_sec-ecmascript-data-types-and-values.md#sec-completion-record-specification-type), o zaman
           
                   1. *status* *lhsRef* olsun.
        
         4. Değilse,
           
                   1. *status* = [Completion](06_sec-notational-conventions.md#sec-completion-ao)([PutValue](07_sec-ecmascript-data-types-and-values.md#sec-putvalue)(*lhsRef*.*[[Value]]*, *nextValue*)) olsun.
    8. Değilse,

      1. Assert: lhsKind lexical-binding'dir.

      2. Assert: lhs bir ForDeclaration'dır.

      3. iterationEnv = NewDeclarativeEnvironment(oldEnv) olsun.

      4. lhs'nin iterationEnv argümanıyla ForDeclarationBindingInstantiation işlemini gerçekleştir.

      5. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını iterationEnv olarak ayarla.

      6. Eğer destructuring true ise, o zaman

         1. *status* = [Completion](06_sec-notational-conventions.md#sec-completion-ao)(*[lhs]*'ın *nextValue* ve *iterationEnv* argümanlarıyla [ForDeclarationBindingInitialization](#sec-runtime-semantics-fordeclarationbindinginitialization) değeri) olsun.
      7. Değilse,

         1. [Assert](06_sec-notational-conventions.md#assert): *lhs* tek bir adı bağlar.
        
         2. *lhsName*, *lhs*'nin [BoundNames](09_sec-syntax-directed-operations.md#sec-static-semantics-boundnames) listesinin tek öğesi olsun.
        
         3. *lhsRef* = ! [ResolveBinding](10_sec-executable-code-and-execution-contexts.md#sec-resolvebinding)(*lhsName*) olsun.
        
         4. *status* = [Completion](06_sec-notational-conventions.md#sec-completion-ao)([InitializeReferencedBinding](07_sec-ecmascript-data-types-and-values.md#sec-initializereferencedbinding)(*lhsRef*, *nextValue*)) olsun.
    9. Eğer status bir ani tamamlanmaysa, o zaman

      1. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını oldEnv olarak ayarla.

      2. Eğer iterationKind enumerate ise, ? status döndür.

      3. Assert: iterationKind iterate'dir.

      4. Eğer iteratorKind async ise, ? AsyncIteratorClose(iteratorRecord, status) döndür.

      5. ? IteratorClose(iteratorRecord, status) döndür.

    10. result = Completion(Evaluation(stmt)) olsun.

    11. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını oldEnv olarak ayarla.

    12. Eğer LoopContinues(result, labelSet) false ise, o zaman

      1. status = Completion(UpdateEmpty(result, iterationResult)) olsun.

      2. Eğer iterationKind enumerate ise, ? status döndür.

      3. Assert: iterationKind iterate'dir.

      4. Eğer iteratorKind async ise, ? AsyncIteratorClose(iteratorRecord, status) döndür.

      5. ? IteratorClose(iteratorRecord, status) döndür.

    13. Eğer result.[[Value]] empty değilse, iterationResultresult.[[Value]] olarak ayarla.

14.7.5.8 Çalışma Zamanı Anlambilimi: Değerlendirme

BindingIdentifier BindingIdentifier : Identifier yield await

  1. bindingId, BindingIdentifier'ın StringValue değeri olsun.

  2. ? ResolveBinding(bindingId) döndür.

14.7.5.9 EnumerateObjectProperties ( obj )

Soyut işlem EnumerateObjectProperties obj (bir Nesne) argümanını alır ve bir yineleyici nesnesi döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. next yöntemi obj'nin numaralandırılabilir özelliklerinin tüm String değerli anahtarları üzerinde yineleme yapan bir yineleyici nesnesi döndür. Bu yineleyici nesnesine ECMAScript kodu tarafından hiçbir zaman doğrudan erişilemez. Özelliklerin numaralandırılma mekanizması ve sırası belirtilmemiştir ancak aşağıda belirtilen kurallara uygun olmalıdır.

Yineleyicinin throw ve return yöntemleri null'dur ve hiçbir zaman çağrılmaz. Yineleyicinin next yöntemi, özellik anahtarının bir yineleyici değeri olarak döndürülüp döndürülmeyeceğini belirlemek için nesne özelliklerini işler. Döndürülen özellik anahtarları, Symbol olan anahtarları içermez. Hedef nesnenin özellikleri numaralandırma sırasında silinebilir. Yineleyicinin next yöntemi tarafından işlenmeden önce silinen bir özellik yoksayılır. Numaralandırma sırasında hedef nesneye yeni özellikler eklenirse, yeni eklenen özelliklerin aktif numaralandırmada işleneceği garanti edilmez. Bir özellik adı, herhangi bir numaralandırmada yineleyicinin next yöntemi tarafından en fazla bir kez döndürülür.

Hedef nesnenin özelliklerinin numaralandırılması, prototipinin özelliklerinin numaralandırılmasını ve prototipinin prototipinin özelliklerinin numaralandırılmasını vb. özyinelemeli olarak içerir; ancak bir prototip özelliği, yineleyicinin next yöntemi tarafından zaten işlenmiş bir özellikle aynı ada sahipse işlenmez. Prototip nesnesinin bir özelliğinin zaten işlenip işlenmediği belirlenirken [[Enumerable]] özniteliklerinin değerleri dikkate alınmaz. Prototip nesnelerinin numaralandırılabilir özellik adları, prototip nesnesi argüman olarak geçilerek EnumerateObjectProperties çağrılarak elde edilmelidir. EnumerateObjectProperties, hedef nesnenin kendi özellik anahtarlarını [[OwnPropertyKeys]] dahili yöntemini çağırarak elde etmelidir. Hedef nesnenin özellik öznitelikleri, [[GetOwnProperty]] dahili yöntemi çağrılarak elde edilmelidir.

Ayrıca, ne obj ne de prototip zincirindeki herhangi bir nesne bir Proxy egzotik nesnesi, TypedArray, modül ad alanı egzotik nesnesi ya da barındırıcı veya uygulama tarafından sağlanan bir egzotik nesne değilse, o zaman yineleyici, aşağıdakilerden biri gerçekleşene kadar CreateForInIterator(obj) tarafından verilen yineleyici gibi davranmalıdır:

  • obj'nin ya da prototip zincirindeki bir nesnenin [[Prototype]] dahili yuvasının değeri değişirse,

  • obj'den ya da prototip zincirindeki bir nesneden bir özellik kaldırılırsa,

  • obj'nin prototip zincirindeki bir nesneye özellik eklenirse, veya

  • obj'nin ya da prototip zincirindeki bir nesnenin bir özelliğinin [[Enumerable]] özniteliğinin değeri değişirse.

14.7.5.10 For-In Yineleyici Nesneleri

Bir For-In Yineleyici, belirli bir nesne üzerinde belirli bir yinelemeyi temsil eden bir nesnedir. For-In Yineleyici nesnelerine ECMAScript kodu tarafından hiçbir zaman doğrudan erişilemez; bunlar yalnızca EnumerateObjectProperties davranışını örneklendirmek için mevcuttur.

14.7.5.10.1 CreateForInIterator ( obj )

Soyut işlem CreateForInIterator obj (bir Nesne) argümanını alır ve bir For-In Yineleyici döndürür. Belirli bir sırada, obj'nin kendi ve devralınan numaralandırılabilir string özelliklerini yineleyen bir For-In Yineleyici nesnesi oluşturmak için kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. iterator, OrdinaryObjectCreate(%ForInIteratorPrototype%, « [[Object]], [[ObjectWasVisited]], [[VisitedKeys]], [[RemainingKeys]] ») olsun.

  2. iterator.[[Object]] özelliğini obj olarak ayarla.

  3. iterator.[[ObjectWasVisited]] özelliğini false olarak ayarla.

  4. iterator.[[VisitedKeys]] özelliğini yeni ve boş bir Liste olarak ayarla.

  5. iterator.[[RemainingKeys]] özelliğini yeni ve boş bir Liste olarak ayarla.

  6. iterator döndür.

14.7.5.10.2 %ForInIteratorPrototype% Nesnesi

%ForInIteratorPrototype% nesnesi:

14.7.5.10.2.1 %ForInIteratorPrototype%.next ( )
  1. iterator this değeri olsun.

  2. Assert: iterator bir Nesnedir.

  3. Assert: iterator, bir For-In Yineleyici örneğinin tüm dahili yuvalarına sahiptir (14.7.5.10.3).

  4. obj, iterator.[[Object]] olsun.

  5. Tekrar et,

    1. Eğer iterator.[[ObjectWasVisited]] false ise, o zaman

      1. keys = ? obj.[[OwnPropertyKeys]]() olsun.

      2. keys listesinin her key öğesi için, do

         1. Eğer *key* [bir String ise](07_sec-ecmascript-data-types-and-values.md#sec-ecmascript-language-types-string-type), o zaman
           
                   1. *key* öğesini *iterator*.*[[RemainingKeys]]* listesine ekle.
      3. iterator.[[ObjectWasVisited]] özelliğini true olarak ayarla.

    2. Tekrar et, iterator.[[RemainingKeys]] boş olmadığı sürece,

      1. key, iterator.[[RemainingKeys]] listesinin ilk öğesi olsun.

      2. iterator.[[RemainingKeys]] listesinden ilk öğeyi kaldır.

      3. Eğer iterator.[[VisitedKeys]] key öğesini içermiyorsa, o zaman

         1. *propertyDesc* = ? *obj*.*[[GetOwnProperty]]*(*key*) olsun.
        
         2. Eğer *propertyDesc* `undefined` değilse, o zaman
           
                   1. *key* öğesini *iterator*.*[[VisitedKeys]]* listesine ekle.
           
                   2. Eğer *propertyDesc*.*[[Enumerable]]* `true` ise, [CreateIteratorResultObject](08_sec-abstract-operations.md#sec-createiterresultobject)(*key*, `false`) döndür.
    3. obj = ? obj.[[GetPrototypeOf]]() olsun.

    4. iterator.[[Object]] özelliğini obj olarak ayarla.

    5. iterator.[[ObjectWasVisited]] özelliğini false olarak ayarla.

    6. Eğer obj null ise, CreateIteratorResultObject(undefined, true) döndür.

14.7.5.10.3 For-In Yineleyici Örneklerinin Özellikleri

For-In Yineleyici örnekleri, %ForInIteratorPrototype% içsel nesnesinden özellikleri devralan sıradan nesnelerdir. For-In Yineleyici örnekleri başlangıçta Tablo 33'te listelenen dahili yuvalarla oluşturulur.

Tablo 33: For-In Yineleyici Örneklerinin Dahili Yuvaları

Dahili Yuva Tür Açıklama
[[Object]] bir Nesne Özellikleri yinelenmekte olan Nesne değeri.
[[ObjectWasVisited]] bir Boolean yineleyici, [[Object]] üzerinde [[OwnPropertyKeys]] yöntemini çağırmışsa true, aksi takdirde false.
[[VisitedKeys]] String'lerden oluşan bir Liste Şimdiye kadar bu yineleyici tarafından döndürülen değerler.
[[RemainingKeys]] String'lerden oluşan bir Liste Prototipinin özellikleri yinelenmeden önce (prototipi null değilse), mevcut nesne için yayılmayı bekleyen kalan değerler.

14.8 continue Deyimi

Sözdizimi

ContinueStatement ContinueStatement[Yield, Await] : continue ; continue [no LineTerminator here] LabelIdentifier[?Yield, ?Await] ;

14.8.1 Statik Anlambilim: Erken Hatalar

ContinueStatement ContinueStatement : continue ; continue LabelIdentifier ;

  • Bu ContinueStatement bir IterationStatement içinde doğrudan veya dolaylı olarak yuvalanmamışsa (ancak işlev veya static ilklendirme bloğu sınırlarını aşmamak kaydıyla) bu bir Sözdizimi Hatasıdır.

14.8.2 Çalışma Zamanı Anlambilimi: Değerlendirme

ContinueStatement ContinueStatement : continue ;

  1. Tamamlanma Kaydı { [[Type]]: continue, [[Value]]: empty, [[Target]]: empty } döndür.

ContinueStatement ContinueStatement : continue LabelIdentifier ;

  1. label, LabelIdentifier'ın StringValue değeri olsun.

  2. Tamamlanma Kaydı { [[Type]]: continue, [[Value]]: empty, [[Target]]: label } döndür.

14.9 break Deyimi

Sözdizimi

BreakStatement BreakStatement[Yield, Await] : break ; break [no LineTerminator here] LabelIdentifier[?Yield, ?Await] ;

14.9.1 Statik Anlambilim: Erken Hatalar

BreakStatement BreakStatement : break ;

  • Bu BreakStatement bir IterationStatement veya bir SwitchStatement içinde doğrudan veya dolaylı olarak yuvalanmamışsa (ancak işlev veya static ilklendirme bloğu sınırlarını aşmamak kaydıyla) bu bir Sözdizimi Hatasıdır.

14.9.2 Çalışma Zamanı Anlambilimi: Değerlendirme

BreakStatement BreakStatement : break ;

  1. Tamamlanma Kaydı { [[Type]]: break, [[Value]]: empty, [[Target]]: empty } döndür.

BreakStatement BreakStatement : break LabelIdentifier ;

  1. label, LabelIdentifier'ın StringValue değeri olsun.

  2. Tamamlanma Kaydı { [[Type]]: break, [[Value]]: empty, [[Target]]: label } döndür.

14.10 return Deyimi

Sözdizimi

ReturnStatement ReturnStatement[Yield, Await] : return ; return [no LineTerminator here] Expression[+In, ?Yield, ?Await] ;

14.10.1 Çalışma Zamanı Anlambilimi: Değerlendirme

ReturnStatement ReturnStatement : return ;

  1. ReturnCompletion(undefined) döndür.

ReturnStatement ReturnStatement : return Expression ;

  1. exprRef = ? Evaluation(Expression) olsun.

  2. exprValue = ? GetValue(exprRef) olsun.

  3. Eğer GetGeneratorKind() async ise, exprValue'yu ? Await(exprValue) olarak ayarla.

  4. ReturnCompletion(exprValue) döndür.

Legacy

14.11 with Deyimi

Sözdizimi

WithStatement WithStatement[Yield, Await, Return] : with ( Expression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return]

14.11.1 Statik Anlambilim: Erken Hatalar

WithStatement WithStatement : with ( Expression ) Statement

14.11.2 Çalışma Zamanı Anlambilimi: Değerlendirme

WithStatement WithStatement : with ( Expression ) Statement

  1. value = ? Evaluation(Expression) olsun.

  2. obj = ? ToObject(? GetValue(value)) olsun.

  3. oldEnv, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  4. newEnv = NewObjectEnvironment(obj, true, oldEnv) olsun.

  5. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını newEnv olarak ayarla.

  6. stmtCompletion = Completion(Evaluation(Statement)) olsun.

  7. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını oldEnv olarak ayarla.

  8. ? UpdateEmpty(stmtCompletion, undefined) döndür.

14.12 switch Deyimi

Sözdizimi

SwitchStatement SwitchStatement[Yield, Await, Return] : switch ( Expression[+In, ?Yield, ?Await] ) CaseBlock[?Yield, ?Await, ?Return]

CaseBlock CaseBlock[Yield, Await, Return] : { CaseClauses[?Yield, ?Await, ?Return]opt } { CaseClauses[?Yield, ?Await, ?Return]opt DefaultClause[?Yield, ?Await, ?Return] CaseClauses[?Yield, ?Await, ?Return]opt }

CaseClauses CaseClauses[Yield, Await, Return] : CaseClause[?Yield, ?Await, ?Return] CaseClauses[?Yield, ?Await, ?Return] CaseClause[?Yield, ?Await, ?Return]

CaseClause CaseClause[Yield, Await, Return] : case Expression[+In, ?Yield, ?Await] : StatementList[?Yield, ?Await, ?Return]opt

DefaultClause DefaultClause[Yield, Await, Return] : default : StatementList[?Yield, ?Await, ?Return]opt

14.12.1 Statik Anlambilim: Erken Hatalar

SwitchStatement SwitchStatement : switch ( Expression ) CaseBlock

14.12.2 Çalışma Zamanı Anlambilimi: CaseBlockEvaluation

Sözdizimi yönelimli işlem CaseBlockEvaluation, input (bir ECMAScript dil değeri) argümanını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

CaseBlock CaseBlock : { }

  1. undefined döndür.

CaseBlock CaseBlock : { CaseClauses }

  1. resultValue undefined olsun.

  2. caseClauses, CaseClauses içindeki CaseClause öğelerinin kaynak metin sırasındaki bir Listesi olsun.

  3. found false olsun.

  4. caseClauses listesinin her clause CaseClause öğesi için, do

    1. Eğer found false ise, o zaman

      1. found = ? CaseClauseIsSelected(clause, input) olsun.
    2. Eğer found true ise, o zaman

      1. completion = Completion(Evaluation(clause)) olsun.

      2. Eğer completion.[[Value]] empty değilse, resultValue'yu completion.[[Value]] olarak ayarla.

      3. Eğer completion bir ani tamamlanmaysa, ? UpdateEmpty(completion, resultValue) döndür.

  5. resultValue döndür.

CaseBlock CaseBlock : { CaseClausesopt DefaultClause CaseClausesopt }

  1. resultValue undefined olsun.

  2. Eğer ilk CaseClauses mevcutsa, o zaman

    1. caseClauses, ilk CaseClauses içindeki CaseClause öğelerinin kaynak metin sırasındaki bir Listesi olsun.
  3. Değilse,

    1. caseClauses yeni ve boş bir Liste olsun.
  4. found false olsun.

  5. caseClauses listesinin her clause CaseClause öğesi için, do

    1. Eğer found false ise, o zaman

      1. found = ? CaseClauseIsSelected(clause, input) olsun.
    2. Eğer found true ise, o zaman

      1. completion = Completion(Evaluation(clause)) olsun.

      2. Eğer completion.[[Value]] empty değilse, resultValue'yu completion.[[Value]] olarak ayarla.

      3. Eğer completion bir ani tamamlanmaysa, ? UpdateEmpty(completion, resultValue) döndür.

  6. foundInB false olsun.

  7. Eğer ikinci CaseClauses mevcutsa, o zaman

    1. secondCaseClauses, ikinci CaseClauses içindeki CaseClause öğelerinin kaynak metin sırasındaki bir Listesi olsun.
  8. Değilse,

    1. secondCaseClauses yeni ve boş bir Liste olsun.
  9. Eğer found false ise, o zaman

    1. secondCaseClauses listesinin her clause CaseClause öğesi için, do

      1. Eğer foundInB false ise, o zaman

         1. *foundInB* = ? [CaseClauseIsSelected](#sec-runtime-semantics-caseclauseisselected)(*clause*, *input*) olsun.
      2. Eğer foundInB true ise, o zaman

         1. *completion* = [Completion](06_sec-notational-conventions.md#sec-completion-ao)([Evaluation](09_sec-syntax-directed-operations.md#sec-evaluation)(*clause*)) olsun.
        
         2. Eğer *completion*.*[[Value]]* `empty` değilse, *resultValue*'yu *completion*.*[[Value]]* olarak ayarla.
        
         3. Eğer *completion* bir [ani tamamlanmaysa](07_sec-ecmascript-data-types-and-values.md#sec-completion-record-specification-type), ? [UpdateEmpty](07_sec-ecmascript-data-types-and-values.md#sec-updateempty)(*completion*, *resultValue*) döndür.
  10. Eğer foundInB true ise, resultValue döndür.

  11. defaultR = Completion(Evaluation(DefaultClause)) olsun.

  12. Eğer defaultR.[[Value]] empty değilse, resultValue'yu defaultR.[[Value]] olarak ayarla.

  13. Eğer defaultR bir ani tamamlanmaysa, ? UpdateEmpty(defaultR, resultValue) döndür.

  14. NOTE: Aşağıdaki, ikinci CaseClauses'un başka bir tam yinelemesidir.

  15. secondCaseClauses listesinin her clause CaseClause öğesi için, do

    1. completion = Completion(Evaluation(clause)) olsun.

    2. Eğer completion.[[Value]] empty değilse, resultValue'yu completion.[[Value]] olarak ayarla.

    3. Eğer completion bir ani tamamlanmaysa, ? UpdateEmpty(completion, resultValue) döndür.

  16. resultValue döndür.

14.12.3 CaseClauseIsSelected ( caseClauseNode, input )

Soyut işlem CaseClauseIsSelected caseClauseNode (bir CaseClause Ayrıştırma Düğümü) ve input (bir ECMAScript dil değeri) argümanlarını alır ve ya bir Boolean içeren normal tamamlanma ya da bir ani tamamlanma döndürür. caseClauseNode'un input ile eşleşip eşleşmediğini belirler. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Assert: caseClauseNode aşağıdaki üretimin bir örneğidir:

CaseClause CaseClause : case Expression : StatementListopt

.

  1. exprRef = ? Evaluation(caseClauseNode'un Expression'ı) olsun.

  2. clauseSelector = ? GetValue(exprRef) olsun.

  3. IsStrictlyEqual(input, clauseSelector) döndür.

14.12.4 Çalışma Zamanı Anlambilimi: Değerlendirme

SwitchStatement SwitchStatement : switch ( Expression ) CaseBlock

  1. exprRef = ? Evaluation(Expression) olsun.

  2. switchValue = ? GetValue(exprRef) olsun.

  3. oldEnv, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  4. blockEnv = NewDeclarativeEnvironment(oldEnv) olsun.

  5. BlockDeclarationInstantiation(CaseBlock, blockEnv) işlemini gerçekleştir.

  6. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını blockEnv olarak ayarla.

  7. blockResult = Completion(CaseBlockEvaluation(CaseBlock, switchValue)) olsun.

  8. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını oldEnv olarak ayarla.

  9. blockResult döndür.

CaseClause CaseClause : case Expression :

  1. empty döndür.

CaseClause CaseClause : case Expression : StatementList

  1. ? Evaluation(StatementList) değerini döndür.

DefaultClause DefaultClause : default :

  1. empty döndür.

DefaultClause DefaultClause : default : StatementList

  1. ? Evaluation(StatementList) değerini döndür.

14.13 Etiketli Deyimler

Sözdizimi

LabelledStatement LabelledStatement[Yield, Await, Return] : LabelIdentifier[?Yield, ?Await] : LabelledItem[?Yield, ?Await, ?Return]

LabelledItem LabelledItem[Yield, Await, Return] : Statement[?Yield, ?Await, ?Return] FunctionDeclaration[?Yield, ?Await, ~Default]

14.13.1 Statik Anlambilim: Erken Hatalar

LabelledItem LabelledItem : FunctionDeclaration

14.13.2 Statik Anlambilim: IsLabelledFunction ( stmt )

Soyut işlem IsLabelledFunction stmt (bir Statement Ayrıştırma Düğümü) argümanını alır ve bir Boolean döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer stmt bir LabelledStatement değilse, false döndür.

  2. item, stmt'nin LabelledItem'ı olsun.

  3. Eğer item

LabelledItem LabelledItem : FunctionDeclaration

ise, true döndür.

  1. subStmt, item'ın Statement'i olsun.

  2. IsLabelledFunction(subStmt) döndür.

14.13.3 Çalışma Zamanı Anlambilimi: Değerlendirme

LabelledStatement LabelledStatement : LabelIdentifier : LabelledItem

  1. Bu LabelledStatement'in « » argümanıyla ? LabelledEvaluation değerini döndür.

14.13.4 Çalışma Zamanı Anlambilimi: LabelledEvaluation

Sözdizimi yönelimli işlem LabelledEvaluation, labelSet (String'lerden oluşan bir Liste) argümanını alır ve ya bir ECMAScript dil değeri veya empty içeren bir normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

BreakableStatement BreakableStatement : IterationStatement

  1. stmtResult = Completion(LoopEvaluation(IterationStatement, labelSet)) olsun.

  2. Eğer stmtResult bir break tamamlanması ise, o zaman

    1. Eğer stmtResult.[[Target]] empty ise, o zaman

      1. Eğer stmtResult.[[Value]] empty ise, stmtResultNormalCompletion(undefined) olarak ayarla.

      2. Değilse, stmtResultNormalCompletion(stmtResult.[[Value]]) olarak ayarla.

  3. ? stmtResult döndür.

BreakableStatement BreakableStatement : SwitchStatement

  1. stmtResult = Completion(Evaluation(SwitchStatement)) olsun.

  2. Eğer stmtResult bir break tamamlanması ise, o zaman

    1. Eğer stmtResult.[[Target]] empty ise, o zaman

      1. Eğer stmtResult.[[Value]] empty ise, stmtResultNormalCompletion(undefined) olarak ayarla.

      2. Değilse, stmtResultNormalCompletion(stmtResult.[[Value]]) olarak ayarla.

  3. ? stmtResult döndür.

LabelledStatement LabelledStatement : LabelIdentifier : LabelledItem

  1. label, LabelIdentifier'ın StringValue değeri olsun.

  2. newLabelSet, labelSet ve « label »'in liste birleştirmesi olsun.

  3. stmtResult = Completion(LabelledEvaluation(LabelledItem, newLabelSet)) olsun.

  4. Eğer stmtResult bir break tamamlanması ise ve stmtResult.[[Target]] label ise, o zaman

    1. stmtResultNormalCompletion(stmtResult.[[Value]]) olarak ayarla.
  5. ? stmtResult döndür.

LabelledItem LabelledItem : FunctionDeclaration

  1. ? Evaluation(FunctionDeclaration) değerini döndür.

Statement Statement : BlockStatement VariableStatement EmptyStatement ExpressionStatement IfStatement ContinueStatement BreakStatement ReturnStatement WithStatement ThrowStatement TryStatement DebuggerStatement

  1. ? Evaluation(Statement) değerini döndür.

14.14 throw Deyimi

Sözdizimi

ThrowStatement ThrowStatement[Yield, Await] : throw [no LineTerminator here] Expression[+In, ?Yield, ?Await] ;

14.14.1 Çalışma Zamanı Anlambilimi: Değerlendirme

ThrowStatement ThrowStatement : throw Expression ;

  1. exprRef = ? Evaluation(Expression) olsun.

  2. exprValue = ? GetValue(exprRef) olsun.

  3. exprValue fırlat.

14.15 try Deyimi

Sözdizimi

TryStatement TryStatement[Yield, Await, Return] : try Block[?Yield, ?Await, ?Return] Catch[?Yield, ?Await, ?Return] try Block[?Yield, ?Await, ?Return] Finally[?Yield, ?Await, ?Return] try Block[?Yield, ?Await, ?Return] Catch[?Yield, ?Await, ?Return] Finally[?Yield, ?Await, ?Return]

Catch Catch[Yield, Await, Return] : catch ( CatchParameter[?Yield, ?Await] ) Block[?Yield, ?Await, ?Return] catch Block[?Yield, ?Await, ?Return]

Finally Finally[Yield, Await, Return] : finally Block[?Yield, ?Await, ?Return]

CatchParameter CatchParameter[Yield, Await] : BindingIdentifier[?Yield, ?Await] BindingPattern[?Yield, ?Await]

14.15.1 Statik Anlambilim: Erken Hatalar

Catch Catch : catch ( CatchParameter ) Block

14.15.2 Çalışma Zamanı Anlambilimi: CatchClauseEvaluation

Sözdizimi yönelimli işlem CatchClauseEvaluation thrownValue (bir ECMAScript dil değeri) argümanını alır ve ya bir ECMAScript dil değeri veya empty içeren bir normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

Catch Catch : catch ( CatchParameter ) Block

  1. oldEnv, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  2. catchEnv = NewDeclarativeEnvironment(oldEnv) olsun.

  3. CatchParameter'ın BoundNames listesindeki her argName öğesi için, do

    1. ! catchEnv.CreateMutableBinding(argName, false) işlemini gerçekleştir.
  4. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını catchEnv olarak ayarla.

  5. status = Completion(BindingInitialization(CatchParameter, thrownValue, catchEnv)) olsun.

  6. Eğer status bir ani tamamlanmaysa, o zaman

    1. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını oldEnv olarak ayarla.

    2. ? status döndür.

  7. blockCompletion = Completion(Evaluation(Block)) olsun.

  8. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını oldEnv olarak ayarla.

  9. ? blockCompletion döndür.

Catch Catch : catch Block

  1. ? Evaluation(Block) değerini döndür.

14.15.3 Çalışma Zamanı Anlambilimi: Değerlendirme

TryStatement TryStatement : try Block Catch

  1. blockResult = Completion(Evaluation(Block)) olsun.

  2. Eğer blockResult bir fırlatma tamamlanması ise, catchResult = Completion(CatchClauseEvaluation(Catch, blockResult.[[Value]])) olsun.

  3. Değilse, catchResult blockResult olsun.

  4. ? UpdateEmpty(catchResult, undefined) döndür.

TryStatement TryStatement : try Block Finally

  1. blockResult = Completion(Evaluation(Block)) olsun.

  2. finallyResult = Completion(Evaluation(Finally)) olsun.

  3. Eğer finallyResult bir normal tamamlanmaysa, finallyResultblockResult olarak ayarla.

  4. ? UpdateEmpty(finallyResult, undefined) döndür.

TryStatement TryStatement : try Block Catch Finally

  1. blockResult = Completion(Evaluation(Block)) olsun.

  2. Eğer blockResult bir fırlatma tamamlanması ise, catchResult = Completion(CatchClauseEvaluation(Catch, blockResult.[[Value]])) olsun.

  3. Değilse, catchResult blockResult olsun.

  4. finallyResult = Completion(Evaluation(Finally)) olsun.

  5. Eğer finallyResult bir normal tamamlanmaysa, finallyResultcatchResult olarak ayarla.

  6. ? UpdateEmpty(finallyResult, undefined) döndür.

14.16 debugger Deyimi

Sözdizimi

DebuggerStatement DebuggerStatement : debugger ;

14.16.1 Çalışma Zamanı Anlambilimi: Değerlendirme

DebuggerStatement DebuggerStatement : debugger ;

  1. Eğer uygulamaya göre tanımlı bir hata ayıklama olanağı mevcut ve etkinse, o zaman

    1. Uygulamaya göre tanımlı bir hata ayıklama eylemini gerçekleştir.

    2. Yeni bir uygulamaya göre tanımlı Tamamlanma Kaydı döndür.

  2. empty döndür.