Dürbün
Tarihsel olarak, JavaScript işlevlerin nasıl kapsandığı konusunda kafası karışmıştı. Bazen statik olarak kapsamlandırılmış gibi görünürler, ancak bazı özellikler onları dinamik olarak kapsamlandırılmış gibi davranır. Bu kafa karıştırıcı, programları okumayı ve anlamayı zorlaştırıyor. Yanlış anlama hatalara neden olur. Aynı zamanda performans için de bir problemdir. Statik kapsam belirleme, değişken bağlamanın derleme zamanında gerçekleşmesine izin verecektir, ancak dinamik kapsam gereksinimi, bağlamanın çalışma zamanına ertelenmesi gerektiği anlamına gelir ve bu da önemli bir performans cezası ile birlikte gelir.
Katı mod, tüm değişken bağlamanın statik olarak yapılmasını gerektirir. Bu, daha önce dinamik bağlama gerektiren özelliklerin kaldırılması veya değiştirilmesi gerektiği anlamına gelir. Özellikle, with ifadesi ortadan kaldırılır ve eval işlevinin arayanın ortamına müdahale etme yeteneği ciddi şekilde kısıtlanır.
Katı kodun avantajlarından biri, YUI Kompresörü gibi araçların
işlerken daha iyi bir iş yapabilmesidir.
Zımni Global Değişkenler
JavaScript genel değişkenleri ima etti. Bir değişkeni açıkça bildirmezseniz, genel bir değişken sizin için örtük olarak bildirilir. Bu, yeni başlayanlar için programlamayı kolaylaştırır, çünkü bazı temel temizlik işlerini ihmal edebilirler. Ancak daha büyük programların yönetimini çok daha zorlaştırır ve güvenilirliği önemli ölçüde azaltır. Bu nedenle katı modda, ima edilen global değişkenler artık yaratılmamaktadır. Tüm değişkenlerinizi açıkça beyan etmelisiniz.
Küresel Sızıntı
this
Global nesneye bağlı olabilecek bazı durumlar vardır . Örneğin, new
bir yapıcı işlevini çağırırken öneki sağlamayı unutursanız , yapıcı this
genel nesneye beklenmedik bir şekilde bağlanır, bu nedenle yeni bir nesne başlatmak yerine bunun yerine global değişkenlerle sessizce müdahale eder. Bu durumlarda, katı mod bunun yerine bağlanacak this
ve undefined
bu da yapıcı yerine bir istisna atmasına neden olacak ve hatanın daha erken tespit edilmesine izin verecektir.
Gürültülü Hata
JavaScript her zaman salt okunur özelliklere sahiptir, ancak ES5'in Object.createProperty
işlevi bu özelliği gösterene kadar bunları kendiniz oluşturamazsınız . Salt okunur bir özelliğe değer atamayı denerseniz, sessizce başarısız olur. Atama, mülkün değerini değiştirmez, ancak programınız sanki olduğu gibi devam eder. Bu, programların tutarsız duruma geçmesine neden olabilecek bir bütünlük tehlikesidir. Katı modda, salt okunur bir özelliği değiştirmeye çalışmak bir istisna atar.
Sekizli
Sayıların sekizli (veya taban 8) temsili, kelime boyutları 3'ün katları olan makinelerde makine düzeyinde programlama yaparken son derece kullanışlıdır. 60 bitlik kelime boyutuna sahip CDC 6600 ana çerçevesi ile çalışırken sekizli gerekir. Sekizli okuyabilseydiniz, bir kelimeye 20 hane olarak bakabilirsiniz. İki basamak op kodunu temsil eder ve bir basamak 8 kayıttan birini tanımlar. Makine kodlarından yüksek seviyeli dillere yavaş geçiş sırasında, programlama dillerinde sekizli formlar sağlamanın yararlı olduğu düşünülmüştür.
C'de, oktalitenin son derece talihsiz bir temsili seçildi: Önde gelen sıfır. Yani C'de, 0100
100 değil , 64 anlamına gelir ve 08
8 değil, bir hatadır. Ne yazık ki, bu anakronizm, sadece hatalar oluşturmak için kullanılan JavaScript dahil olmak üzere neredeyse tüm modern dillere kopyalanmıştır. Başka bir amacı yok. Yani katı modda, sekizli formlara artık izin verilmiyor.
Ve benzeri
Sözde dizi bağımsız değişkenleri ES5'te biraz daha diziye benzer hale gelir. Katı modda, callee
ve caller
özelliklerini kaybeder . Bu, arguments
çok fazla gizli bağlamdan vazgeçmeden güvenilmeyen kodunuza geçmenizi mümkün kılar . Ayrıca
arguments
işlevlerin özelliği elimine edilir.
Katı modda, işlev değişmezindeki yinelenen tuşlar bir sözdizimi hatası oluşturur. Bir işlevin aynı ada sahip iki parametresi olamaz. Bir işlev, parametrelerinden biriyle aynı ada sahip bir değişkene sahip olamaz. Bir fonksiyonun delete
kendi değişkenleri olamaz . Denemesi
delete
yapılandırılamayan özelliği artık bir istisna atar. İlkel değerler örtük olarak sarılmaz.
ECMAScript 5, ayrılmış kelimelerin bir listesini ekler. Bunları değişken veya bağımsız değişken olarak kullanırsanız katı mod bir hata atar. Ayrılmış kelimeler: