JavaScript’teki Kapatma Tarzlarındaki Farklılıkları Anlamak

JavaScript programlamasına dalarken, çeşitli kapatma yazım tarzları ile karşılaşılabilir. En dikkat çekici olanlar anonim kurucu ve hızlı yürütülen işlev dir. Birçok geliştirici bu iki tarzı ayıran unsurların neler olduğunu ve birinin diğerine göre daha mı tercih edilir olduğunu merak eder. Bu blog yazısında, bu iki kapatma tarzı arasındaki davranış farklılıklarını keşfedecek ve ayrıca her birinin avantajlarını ve dezavantajlarını değerlendireceğiz.

Kapatmalar Nedir?

Her bir tarzın detaylarına girmeden önce, JavaScript’te kapatma nedir kısaca açıklayalım. Kapatma, işlevin sözlük kapsamına erişimini koruyan bir işlevdir; bu, işlevin bu kapsamın dışında çalıştırıldığı durumları kapsar. Bu kural, veri kapsülleme ve fabrika işlevleri gibi güçlü programlama kalıplarını mümkün kılar.

İki Kapatma Tarzı

1. Anonim Kurucu

İlk tarz, anonim kurucu olarak bilinir ve şu şekilde tanımlanabilir:

new function() { 
  // Kodunuzu buraya yazın
}

Bu yaklaşım, mantığınızı tanımlayabileceğiniz bir işlevi çağırır. new anahtar kelimesinin varlığı, bu işlevin bir kurucu olarak değerlendirilmesini sağlar.

2. Hızlı Yürütülen İşlev

İkinci tarz, hızlı yürütülen işlevdir ve şu şekilde görünür:

(function() {
  // Kodunuzu buraya yazın
})();

Bu durumda, işlev hemen yürütülür, bu da kurucu oluşturmadan kod çalıştırmanın hızlı bir yolunu sağlar.

İki Tarz Arasındaki Temel Farklılıklar

Artık her bir tarzın temellerini anladığımıza göre, davranış ve performans açısından onları karşılaştıralım.

Dönüş Değerleri

  • Dönüş Davranışı:
    • anonim kurucu için, işlevin dönüş değeri, bir nesnenin açıkça döndürülüp döndürülmediğine bağlı olarak değişebilir.
    • Aksine, hızlı yürütülen işlev, nesne dikkate almadan basitçe yürütülür.

this Bağlamı

  • Bağlam Davranışı:
    • new function() kullanıldığında, işlev içindeki this değeri oluşturulan yeni nesneye referans verir.
    • Tersine, hızlı yürütülen işlevde, this global bağlama (veya sıkı modda undefined‘a) refere edilir, çünkü yeni bir nesne oluşturmaz.

Performans Düşünceleri

  • Hız:
    • new function() tarzı, this için yeni bir nesne oluşturulmasını gerektirdiğinden daha yavaş olabilir.
    • Ancak, performans farkı genellikle önemsizdir, yalnızca büyük bir kod hacmi çalıştırıyorsanız. Performans açısından kritik kodda karmaşık kapatmalardan kaçınmak genellikle önerilir.

İç Mekanikler

  • new expressionın iç işleyişi şu şekilde özetlenebilir:
var tempObject = {};
var result = expression.call(tempObject);
if (result is not an object)
    result = tempObject;
  • Burada, tempObject çağrılar öncesinde ifadenin prototipini alır. Bu fenomen, JavaScript’in kurucu işlevleriyle başa çıkmasında önemli bir parçadır.

Sonuç: Hangisini Kullanmalı?

anonim kurucular ve hızlı yürütülen işlevler arasında seçim yapmak genelde kodunuzun özel gereksinimlerine bağlıdır.

  • Eğer this bağlamını yeni oluşturulan nesneye ayarlamanız veya bir nesne haline gelmesi gereken dönüş değerlerini ele almanız gereken bir durum varsa bir anonim kurucu kullanın.
  • Eğer amacınız yeni bir nesne oluşturmanın yükü olmadan kod yürütmek ise bir hızlı yürütülen işlev tercih edin.

Çoğu senaryoda, performans ve okunabilirliği göz önünde bulundurarak, geliştiriciler kendilerini hızlı yürütülen işlevi tercih ederken bulabilir. Ancak her iki tarzın da JavaScript ekosisteminde yeri vardır. Bu nüansları anlamak, kodlama yolculuğunuzda daha bilinçli kararlar vermenizi sağlayacaktır.

Mutlu kodlamalar! Kapatma tarzları hakkında daha fazla sorunuz veya deneyiminiz varsa, lütfen aşağıdaki yorumlarda paylaşmaktan çekinmeyin!