Eğer bir VariableDeclaration bir with deyimi içinde yuvalanmışsa ve VariableDeclaration içindeki BindingIdentifier, with deyiminin Nesne Ortam Kaydı bağlama nesnesinin bir özellik adıyla aynıysa, o zaman 5 adımı Identifier'ın VariableEnvironment bağlamasına atamak yerine value'yu özelliğe atayacaktır.
VariableDeclaration VariableDeclaration : BindingPattern Initializer
rhs = ? Evaluation(Initializer) olsun.
rightValue = ? GetValue(rhs) olsun.
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
boundNames = ? BindingPropertyList'in value ve envRecord argümanlarıyla PropertyBindingInitialization değeri olsun.
nextNames = ? BindingProperty'in value ve envRecord argümanlarıyla PropertyBindingInitialization değeri olsun.
boundNames ve nextNames'in liste birleştirmesini döndür.
BindingProperty BindingProperty : SingleNameBinding
name, SingleNameBinding'in BoundNames listesinin tek öğesi olsun.
? SingleNameBinding'in value, envRecord ve name argümanlarıyla KeyedBindingInitialization işlemini gerçekleştir.
« name » döndür.
BindingProperty BindingProperty : PropertyName : BindingElement
propertyKey = ? Evaluation(PropertyName) olsun.
? BindingElement'in value, envRecord ve propertyKey argümanlarıyla KeyedBindingInitialization işlemini gerçekleştir.
« 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
lhs = ? ResolveBinding(BindingIdentifier'ın StringValue değeri, envRecord) olsun.
restObj = OrdinaryObjectCreate(%Object.prototype%) olsun.
? CopyDataProperties(restObj, value, excludedNames) işlemini gerçekleştir.
Eğer envRecord undefined ise, ? PutValue(lhs, restObj) döndür.
? 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.