Javascript Hoisting Nedir?
12 Haziran 2023Javascript'te fonksiyonları ve değişkenleri declare edilmeden önce kullanılabilirler, bunun sebebi hoisting
(yukarı kaldırma,kaldırma)dir.
Declaration ve Initilization Farkı
Hoistingin nasıl çalıştığını kavramak için öncelikle declaration ve initialization farkını bilmeliyiz. Declaration bir değişkenin var / let / const keywordlerinden herhangi biriyle tanımlanması anlamına gelirken, initialization bir değişkene başlangıç değeri atanması anlamına gelir.
Hoisting Nedir?
Hoisting değişkenlerin, fonksiyonların declaration'larının üste çıkarılmasıdır. Bu sayede Javascript'te başlangıç değeri atanmamış bir değişkene erişebiliriz herhangi bir hata ile karşılaşmadan.
Örnekte görüleceği üzere isim daha sonra declare edilip başlangıç değeri verilse de hoisting isim adlı değişkenin declaration'ını en üste alır böylece loglamaya çalıştığımızda herhangi bir hata almayız. Ancak dikkat edersek logladığımız değer "furkan"
değil "undefined"
olacaktır. Çünkü hoisting yalnızca declartion'ı yukarı taşır, başlangıç değeri dolayısıyla "undefined" olur. Yani sadece anlaşılması için kodumuzun çalıştırılmadan önce bu şekle dönüştürüldüğünü varsayabiliriz:
var ve let / const ile Tanımlanan Değişkenlerde Hoisting
Yukarıdaki örneklerde görebileceğiniz gibi var
ile tanımladığımız değişkenlere erişmeye çalıştığımızda hoist işlemi sayesinde bir hata almıyor ancak başlangıç değeri olarak undefined
alıyoruz. ES5 ile tanıtılan let
ve const
ile oluşturduğumuz değişkenlerde ise declaration'lar yine hoisting sayesinde yukarı alınıyor ancak başlangıç değerleri olmuyor bu sebeple bu değişkenlere erişmeye çalıştığımızda ReferenceError
alıyoruz.
var
ile tanımlanan değişkenlerde uygulanan hoisting kafa karışıklığı yaratabileceğinden, mümkün olduğunca teknik olarak mümkün olsa dahi tanımlamadığız değişkenlere erişmekten kaçınmak önerilir.
Fonksiyonlarda Hoisting
function
keywordü ile declare ettiğimiz fonksiyonlarda hoisting gerçekleşirken const
let
ile oluşturduğumuz function expressionlarda hoisting gerçekleşmez.