Hoisting
var ve function tanımlarının nasıl yukarı taşınıp let/const'un taşınmadığını öğrenirsin.
Hoisting nedir?
Hoisting, JavaScript motorunun bazı tanımları kod çalışmadan önce sanki en üste taşınıyormuş gibi davranmasıdır. var ile tanımlanan değişkenler ve function tanımları hoisted olur; yani tanımdan önce de kullanılabilirler.
Ama let ve const hoisted değildir. Bunlara tanımdan önce erişirsen ReferenceError alırsın; bu durum temporal dead zone (TDZ) olarak bilinir. Bu yüzden modern kodda tanımları her zaman dosyanın veya fonksiyonun başında tutmak en güvenlisidir.
Function hoisting
Function declaration (fonksiyon tanımı) tüm gövdesiyle birlikte hoisted olur. Yani function greet() { return 'merhaba'; } tanımını dosyanın sonunda yazsan bile, daha üstte greet() çağrısı çalışır.
Ama function expression (fonksiyon ifadesi) böyle değildir. const greet = function() { ... }; yazdığında yalnızca greet değişkeni tanımlanır; fonksiyonun kendisi atanana kadar çağrılamaz. Bu ayrım eski kodlarda çok görülür.
Uygulama Function hoisting'i göster
function start() tanımını dosyanın altına yaz. Fonksiyon "başladı" döndürsün. En üstte console.log(start()) çağrısıyla sonucu yazdır. Hoisting sayesinde tanımdan önce çağırmak çalışır.
Örnek çözümü göster
console.log(start());
function start() {
return "başladı";
}
Kendini test et
-
Bu kod ne yazdırır?
console.log(greet()); function greet() { return 'merhaba'; }- merhaba
- undefined
- ReferenceError
- TypeError
Cevabı göster
merhaba — Doğru. function tanımı hoisted olduğu için tanımdan önce çağrılır.
-
Hangi anahtar bu kodu hata vermeden çalıştırır?
console.log(city); ____ city = 'İstanbul';Cevabı göster
console.log(city); var city = 'İstanbul'; -
Tanım türünü davranışıyla eşleştir
- var x = 1
- Hoisted olur
- let x = 1
- TDZ, önceden erişilemez
- const x = 1
- TDZ, yeniden atanamaz
- function f() {}
- Bütün halde hoisted