ECMAScript'in Strict Modu
Strict mod kısıtlamaları ve istisnaları
implements,interface,let,package,private,protected,public,staticveyield, strict mod kodu (strict mode code) içinde ayrılmış sözcüklerdir (reserved words). (12.7.2).Uyumlu bir gerçekleştirim, strict mod kodunu (strict mode code) işlerken, aşağıdaki kuralların örneklerine izin vermemelidir:
NumericLiteral NumericLiteral :: LegacyOctalIntegerLiteral
ve
DecimalIntegerLiteral DecimalIntegerLiteral :: NonOctalDecimalIntegerLiteral
.
Uyumlu bir gerçekleştirim, strict mod kodunu (strict mode code) işlerken, aşağıdaki kuralların örneklerine izin vermemelidir:
EscapeSequence EscapeSequence :: LegacyOctalEscapeSequence
ve
EscapeSequence EscapeSequence :: NonOctalDecimalEscapeSequence
.
Bildirilmemiş bir tanımlayıcıya yapılan atama veya başka bir şekilde çözümlenemeyen referans, global nesnede (global object) bir özellik oluşturmaz. Strict mod kodu (strict mode code) içinde basit bir atama gerçekleştiğinde, bunun LeftHandSideExpression'ı çözümlenemeyen bir Referansa (Reference) değerlendirilmemelidir. Değerlendirilirse bir
ReferenceErroristisnası fırlatılır (6.2.5.6). LeftHandSideExpression ayrıca öznitelik değeri { [[Writable]]:false} olan bir veri özelliğine (data property), öznitelik değeri { [[Set]]:undefined} olan bir erişici özelliğine (accessor property), veya [[Extensible]] dahili yuvası (internal slot)falseolan bir nesnenin var olmayan bir özelliğine referans olamaz. Bu durumlarda birTypeErroristisnası fırlatılır (13.15).StringValue değeri
"eval"veya"arguments"olan bir IdentifierReference, bir Atama (Assignment) işlecinin LeftHandSideExpression'ı (13.15) veya bir UpdateExpression'ı (13.4) olarak ya da bir Önek Artırma (Prefix Increment) (13.4.4) veya bir Önek Azaltma (Prefix Decrement) (13.4.5) işleci tarafından işlem yapılan UnaryExpression olarak görünemez.Strict fonksiyonlar (strict functions) için Arguments nesneleri, erişildiğinde bir
TypeErroristisnası fırlatan, yapılandırılamayan (non-configurable) bir"callee"erişici özelliğini (accessor property) tanımlar (10.4.4.6).Strict fonksiyonlar (strict functions) için Arguments nesneleri, dizi indeksli (array-indexed) özellik değerlerini, fonksiyonlarının karşılık gelen biçimsel parametre bağlamalarıyla (formal parameter bindings) dinamik olarak paylaşmaz. (10.4.4).
Strict fonksiyonlar (strict functions) için, eğer bir arguments nesnesi oluşturulursa, yerel tanımlayıcı
arguments'ın arguments nesnesine bağlaması değiştirilemez (immutable) olur ve bu nedenle bir atama ifadesinin (assignment expression) hedefi olamaz. (10.2.11).Strict mod kodu (strict mode code) içinde bir BindingIdentifier kuralının StringValue değeri
"eval"veya"arguments"ise bu birSyntaxErrordır (13.1.1).Strict mod eval kodu, eval çağrısını yapanın değişken ortamında (variable environment) değişkenleri veya fonksiyonları örneklendiremez. Bunun yerine, yeni bir değişken ortamı oluşturulur ve bu ortam eval kodunun bildirim bağlama örneklendirmesi (declaration binding instantiation) için kullanılır (19.2.1).
Eğer
this, strict mod kodu (strict mode code) içinde değerlendirilirse,thisdeğeri bir nesneye zorlanmaz (coerced).undefinedveyanullolan birthisdeğeri global nesneye (global object) dönüştürülmez ve ilkel (primitive) değerler sarmalayıcı nesnelere (wrapper objects) dönüştürülmez. Bir fonksiyon çağrısı (hemFunction.prototype.applyhem deFunction.prototype.callkullanılarak yapılan çağrılar dahil) aracılığıyla geçirilenthisdeğeri, geçirilenthisdeğerini bir nesneye zorlamaz (10.2.1.2, 20.2.3.1, 20.2.3.3).Strict mod kodu (strict mode code) içinde bir
deleteişleci yer aldığında, bunun UnaryExpression'ı bir değişkene, fonksiyon argümanına veya fonksiyon adına doğrudan bir referans ise birSyntaxErrorfırlatılır (13.5.1.1).Strict mod kodu (strict mode code) içinde bir
deleteişleci yer aldığında, silinecek özellik { [[Configurable]]:false} özniteliğine sahipse veya başka bir şekilde silinemiyorsa birTypeErrorfırlatılır (13.5.1.2).Strict mod kodu (strict mode code) bir WithStatement içeremez. Böyle bir bağlamda bir WithStatement'in bulunması bir
SyntaxErrordır (14.11.1).Strict mod kodu (strict mode code) içinde bir CatchParameter bulunursa ve CatchParameter kuralının BoundNames değeri
evalveyaargumentsiçeriyorsa bu birSyntaxErrordır (14.15.1).Bir strict fonksiyonun (strict function) FormalParameters'ı içinde aynı BindingIdentifier birden fazla kez bulunursa bu bir
SyntaxErrordır. Bir Function, Generator veya AsyncFunction yapıcısı (constructor) kullanarak böyle bir fonksiyon oluşturma teşebbüsü birSyntaxErrordır (15.2.1, 20.2.1.1.1).Bir gerçekleştirim, fonksiyon örneklerinin
"caller"veya"arguments"adlı özelliklerinin strict fonksiyonlar (strict functions) içindeki anlamlarını bu belirtimde tanımlananın ötesinde genişletemez.