Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi

JavaScript'te use strict nedir?​


JavaScript'te "use strict", kodu strict mode adı verilen daha katı çalışma kurallarında yürütmek için kullanılan özel bir yönergedir. Yazım hatalarını ve sessizce göz ardı edilen hataları daha erken görünür hâle getirir. Klasik betiğin veya uygun bir fonksiyon gövdesinin başındaki yönerge bölümüne eklenir. Eski kodda kapsamı bilinçli seçip ortaya çıkan hataları test ederek geçmek gerekir.

Kod:
"use strict";

let kullanici = "Ayşe";
console.log(kullanici);

Bu örnekte yönerge, değişken tanımı gibi sonraki kodu etkiler. Başka sıradan bir ifadeden sonra yazılırsa o kapsam için strict mode'u etkinleştirmez; yorumlar, boşluklar ve aynı yönerge bölümündeki diğer string yönergeler bununla karıştırılmamalıdır; yönerge olarak tanınması için fonksiyon gövdesinin veya betiğin başında, yalnızca ifade olarak bulunması gerekir.

Nasıl çalışır?​


Strict mode bazı hatalı kullanımları sessizce düzeltmek veya yok saymak yerine hata olarak bildirir. Örneğin tanımlanmamış bir değişkene atama yapılamaz:

Kod:
"use strict";

sayac = 1;

Kod çalıştırıldığında ReferenceError alınır; çünkü sayac daha önce let, const veya var ile tanımlanmamıştır. Doğru biçim şöyledir:

Kod:
"use strict";

let sayac = 1;
console.log(sayac); // 1

Strict mode, normal bir fonksiyon çağrısında this değerini otomatik olarak global nesneye dönüştürmez. Bu nedenle aşağıdaki örnekte this değeri undefined olur:

Kod:
"use strict";

function kimim() {
    return this;
}

console.log(kimim()); // undefined

Bu davranış, yanlış nesneyi değiştirme riskini azaltır. Bir nesne bağlamı gerekiyorsa fonksiyonu nesne üzerinden çağırabilir veya call/bind ile açıkça bağlayabilirsiniz.

Dosya ve fonksiyon kapsamı​


Dosyanın başına yazılan yönerge, o betikteki ilgili kodu etkiler:

Kod:
"use strict";

function hesapla() {
    toplam = 10; // ReferenceError
}

hesapla();

Yalnız bir fonksiyonu strict mode'a almak için yönergeyi fonksiyon gövdesinin ilk satırına koyabilirsiniz:

Kod:
function hesapla() {
    "use strict";
    let toplam = 10;
    return toplam;
}

console.log(hesapla()); // 10

Strict olmayan dış koddan strict bir fonksiyon çağrılabilir; fonksiyonun kendi gövdesindeki kurallar yine strict olarak uygulanır. ES modülü olarak yüklenen kod (içinde import/export olmasa da) ve class gövdeleri zaten strict mode kurallarıyla çalıştığından bunlarda ayrıca "use strict" yazmak genellikle gerekli değildir.

Sık karşılaşılan farklar​


Aşağıdaki karar tablosu, mevcut kodda yönerge eklerken hangi davranışı kontrol etmeniz gerektiğini gösterir.

DurumStrict olmayan davranışStrict mode davranışı
Tanımsız değişkene atamaGlobal özellik oluşturabilir veya ortama göre sessiz kalabilirHata verir
Normal fonksiyonda thisGlobal nesneye dönüştürülebilirundefined olur
Salt okunur özelliği değiştirmeAtama yok sayılabilirHata verir
Aynı isimli fonksiyon parametreleriBazı durumlarda kabul edilebilirSözdizimi hatasıdır

Bu yüzden yönergeyi ekledikten sonra özellikle tanımsız atamaları, this kullanan fonksiyonları ve eski kodda tekrarlanan parametre adlarını test edin. Hata almanız, strict mode'un kodu bozduğu anlamına gelmez; daha önce gizlenen bir sorunu görünür kıldığı anlamına gelebilir.

Uygulama adımları​


  1. Kapsamı seçin: tüm klasik betik için ilk satıra, yalnızca bir bölüm için ilgili fonksiyonun ilk satırına "use strict"; ekleyin.
  2. Kodunuzu çalıştırın ve ilk hatayı düzeltin. Tanımsız atamaları açık değişken bildirimleriyle değiştirin.
  3. this kullanan fonksiyonlarda çağrı biçimini kontrol edin; gereken nesneyi açıkça sağlayın.
  4. Lint, birim testi veya normal çalışma senaryolarınızı yeniden çalıştırın. Hata olmaması yönergenin doğru tanındığının tek başına kanıtı değildir; konumunu ve betik/modül olarak nasıl yüklendiğini de doğrulayın.

Yönerge tek başına kodun tüm hatalarını bulmaz. Mantık hatalarını, asenkron işlemlerdeki sorunları veya yanlış API kullanımını otomatik olarak çözmez. Ayrıca strict mode bir güvenlik sınırı değildir; kullanıcı girdisini doğrulama ve uygun yetkilendirme gibi uygulama önlemlerinin yerini tutmaz.

Sık sorulan sorular​


Varsayılan parametreli fonksiyonun içine use strict yazılabilir mi?​


Parametre listesi varsayılan değer, destructuring veya rest parametre içeriyorsa fonksiyon gövdesine bu yönergeyi eklemek SyntaxError oluşturur. Gerekirse çevreleyen klasik betiği strict yapın veya modül bağlamını kullanın; yalnız yönergeyi gövdeye taşımak eşdeğer değildir.

Her JavaScript dosyasına use strict eklemeli miyim?​


Klasik script dosyalarında kapsamı bilinçli seçerek ekleyebilirsiniz. ES modülleri ve class gövdeleri zaten strict olduğundan tekrar yazmak işlevsel bir değişiklik sağlamaz. Eski bir dosyada önce testleri çalıştırıp ortaya çıkan hataları düzeltmek daha güvenlidir.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic