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şlev
dir 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çindekithis
değeri oluşturulan yeni nesneye referans verir.- Tersine,
hızlı yürütülen işlev
de,this
global bağlama (veya sıkı moddaundefined
‘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şlev
i 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!