Takip et

JavaScript Hoisting: Detaylı Anlatım ve Örnekler

JavaScript Hoisting: Detaylı Anlatım ve Örnekler

Merhaba! Ben Fatih Soysal ve bugün JavaScript’te sık karşılaşılan, ancak tam olarak anlaşılamayan bir kavram olan “Hoisting”i detaylı bir şekilde ele alacağız. Hoisting, JavaScript’in çalışma zamanı davranışını anlamak için oldukça önemlidir. Öncelikle, hoisting’in ne olduğunu basitçe açıklayalım: JavaScript yorumlayıcısı, kodun çalıştırılmadan önce değişken ve fonksiyon tanımlarını kodun en üstüne “kaldırır”. Bu, kodun yazıldığı sıraya göre değil, beyan edildiği sıraya göre çalıştığı anlamına gelir. Ancak bu, değişkenlere ve fonksiyonlara değer atamasını da yukarıya taşıdığı anlamına gelmez. Bu durum bazen beklenmedik sonuçlara yol açabilir.

Değişken Hoisting’i

Öncelikle değişken hoisting’ini ele alalım. Bir değişkeni tanımlamadan önce kullanmaya çalışırsanız, JavaScript undefined değerini döndürür. Bunun nedeni, değişkenin deklarasyonunun kodun başına taşınması, ancak değer atamasının taşınmamasıdır. Aşağıdaki örneğe bakalım:


console.log(myVar); // undefined çıktısı verir
var myVar = 10; 

Yukarıdaki kodda, myVar değişkenini tanımlamadan önce konsola yazdırmaya çalışıyoruz. JavaScript, myVar‘ı hoisting yapar ve bu nedenle bir hata vermez. Ancak değişkene henüz bir değer atanmadığı için undefined çıktısı alırız. Bu durumu daha iyi anlamak için, JavaScript’in aslında arka planda ne yaptığını düşünelim:


var myVar; // hoisting sonrası durum
console.log(myVar); // undefined
myVar = 10;

Görüldüğü gibi, JavaScript yorumlayıcısı, var myVar = 10; satırını, var myVar; şeklinde kodun başına taşımıştır. Ancak myVar = 10; kısmı taşınmamıştır. Sonuç olarak, console.log(myVar); satırı undefined değerini görüntüler.

Fonksiyon Hoisting’i

Fonksiyon hoisting’i değişken hoisting’inden biraz farklıdır. JavaScript’te, fonksiyon deklarasyonları (fonksiyon ifadeleri değil) kodun başına tamamen taşınır. Yani, fonksiyonu tanımlamadan önce çağırabilirsiniz ve bu durumda sorunsuz çalışır. Şimdi bir örneğe bakalım:


myFunction(); // "Merhaba Dünya!" çıktısı verir

function myFunction() {
  console.log("Merhaba Dünya!");
}

Bu kodda, myFunction() fonksiyonunu tanımlamadan önce çağırıyoruz. Ancak kod hata vermez ve “Merhaba Dünya!” çıktısını alırız. Çünkü JavaScript, myFunction fonksiyonunun tanımını kodun başına taşır. Bu, fonksiyon ifadeleri için geçerli değildir. Fonksiyon ifadeleri hoisting yapılmaz ve tanımlanmadan önce çağrılırlarsa hata verirler.

Hoisting’in Olası Sorunları

Hoisting, kod okunabilirliğini azaltabilir ve beklenmedik hatalara yol açabilir. Bu nedenle, değişken ve fonksiyonlarınızı kodunuzun başında tanımlamanız, daha temiz ve anlaşılır bir kod yazmanıza yardımcı olur. Bu, kodun daha kolay hata ayıklanmasını ve bakımının yapılmasını sağlar. Ayrıca, kendi web sitemde JavaScript ile ilgili daha fazla makale bulabilirsiniz.

Önemli Not: let ve const ile tanımlanan değişkenler hoisting yapılmaz. Bunları tanımlamadan önce kullanmaya çalışırsanız, bir “ReferenceError” hatası alırsınız.

Umarım bu makale, JavaScript hoisting’ini anlamak için size yardımcı olmuştur. Daha fazla bilgi için aşağıdaki kaynaklara göz atabilirsiniz:

#Etiketler: JavaScript, Hoisting, Değişken, Fonksiyon, JavaScript Hoisting Örnekleri, JavaScript Hoisting Açıklaması, Programlama, Web Geliştirme, let, const, var, undefined, ReferenceError

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.