JavaScript’te “Strict Mode” Kullanımı
Bu yazımızda, JavaScript’te “Strict Mode” kavramının ne olduğunu, nasıl kullanıldığını ve bu modun kodunuzu nasıl daha güvenli ve optimize edilmiş hale getirebileceğini detaylıca inceleyeceğiz.
“Strict Mode” Nedir?
“Strict mode” (katı mod), dilin daha kesin bir alt kümesini kullanarak kodun daha güvenli ve optimize bir şekilde yazımasını sağlar.
ES5 (ECMAScript 5) ile tanıtılan bu özellik, JavaScript dosyasında veya fonksiyon içinde “use strict”; ifadesi eklenerek etkinleştirilir. “Strict Mode”, bazı potansiyel hatalara ve yanıltıcı davranışlara sebep olabilecek eski JavaScript özelliklerini devre dışı bırakır. Aynı zamanda, bazı hataların daha açıkça raporlanmasını sağlar.
“use strict;
” komutu ile etkinleştirdiğimiz bu yapı, yazılan kodların daha katı bir kontrol mekanizması tarafından denetlenmesini sağlar. Bu sayede, normalde yapılabilen birtakım şeylerin önüne geçilir ve bu da daha güvenli bir kod yazımını mecburi kılar.
“Peki, use strict;
komutu neleri önler?” Bu soruya adım adım cevap verelim.
- Hataları önlemek: Normal modda, bir değişkene atanmadan önce tanımlanmazsa (beyan edilmezse), bu değişken otomatik olarak global bir değişken haline gelir. Eğer
"strict mode";
aktifse ve herhangi bir değişkenvar
,let
,const
gibi anahtar kelimelerle tanımlamadan kullannılırsa hataya neden olur.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// normal mod function myFunction() { carName = "Volvo"; } myFunction(); console.log(carName); // "Volvo" // strict mode "use strict"; function myFunction() { carName = "Volvo"; // ReferenceError: carName is not defined } myFunction(); console.log(carName); |
- Geçmişe dönük uyumluluk ve gelecekteki sözdizimini engelleme: Katı mod, geçmişe dönük uyumlu olmayan veya gelecekteki sözdizim hatalarını önlemek için bazı kelimelerin kullanımını yasaklar.
Gelecekte dilin bir parçası olabilecek bazı anahtar kelimelerin (örneğin, implements
, interface
, let
, package
, private
, protected
, public
, static
ve yield
) şimdiden kullanılmasını engeller. Örneğin, let ve const ECMAScript 6 ile birlikte tanıtılan anahtar kelimelerdir ve use strict;
bu kelimelerin normal değişken adları olarak kullanılmasına izin vermez:
1 2 3 |
"use strict"; let let = 10; // SyntaxError: Unexpected strict mode reserved word |
- this için undefined değeri: Katı mod, bağımsız bir fonksiyonun
this
‘inin global nesneye (window
) referans vermesini önler. Bunun yerine, bağımsız bir fonksiyonunthis
‘iundefined
‘a referans verir:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//normal mod function myFunction() { console.log(this); // window object (global object) } myFunction(); // strict mode "use strict"; function myFunction() { console.log(this); // "undefined" } myFunction(); |
- Duplicated parameters: Katı mod, aynı isimde birden fazla parametre belirtmemizi engeller. Bu, normal modda izin verilir bir şey ve genellikle hatalara yol açar:
1 2 3 4 |
"use strict"; function myFunction(a, a) { // Uncaught SyntaxError: Duplicate parameter name not allowed in this context return a + a; } |
- Delete operatörünün yanlış kullanımını engelleme: Katı mod, değişkenlerin, fonksiyonların veya fonksiyon parametrelerinin silinmesini engeller. Normalde,
delete
operatörünün yanlış kullanılması bir hata oluşturmaz, ancak"strict mode";
bu tür kullanımları hata olarak işler:
1 2 3 4 5 6 |
"use strict"; let x = 3.14; delete x; // SyntaxError: Delete of an unqualified identifier in strict mode. function x(p1, p2) {}; delete x; // SyntaxError: Delete of an unqualified identifier in strict mode. |
- Octal literal’ların (Sekizlik Sayıların) kullanımını engelleme: JavaScript’in erken versiyonlarında, sekizlik (octal) sayılar 0’la başlar. İstenmeyen hataları önlemek adına, bu tür octal literal’ların kullanımını engellenir ve hata oluşturulur:
1 2 |
"use strict"; let x = 010; // SyntaxError: Octal literals are not allowed in strict mode. |
Bu özellikler, strict mode’un neden modern JavaScript uygulamalarında kullanıldığını gösterir. Bu nedenle, yeni bir projeye başlarken “strict mode”u aktif etmek genellikle iyi bir uygulama olarak kabul edilir.
Ayrıca tekrar belirtmek isterim ki, "use strict";
ifadesini JavaScript’te global olarak bir dosyanın başında kullanabileceğiniz gibi, sadece belirli bir fonksiyon içinde de kullanabilirsiniz. Fonksiyon içinde kullanıldığında, sadece o fonksiyonun kapsamında “Strict Mode” aktif olur. Örneğin, aşağıdaki gibi bir kod yazabiliriz:
1 2 3 4 5 6 7 8 |
function myFunction() { "use strict"; // Strict Mode içinde kod var v = "Hello World"; // 'var' kullanılmadan bir değişken tanımlarsanız hata alırsınız. } // Bu kısımda Strict Mode aktif değil var x = 10; |
Bu tür bir kullanım, tüm kodunuzda “Strict Mode”u etkinleştirmek istemediğinizde, ancak belirli fonksiyonlarda bu modun avantajlarından yararlanmak istediğinizde faydalıdır. Bu, özellikle eski bir kod tabanını güncellerken ve sadece belirli kısımlarda “Strict Mode”u etkinleştirmek istediğinizde kullanışlı olabilir.