CodeBlanks Logo Icon CodeBlanks

Hoisting

JavaScript kursu · Orta seviye · Ders 11/134

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

  1. 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.

  2. Hangi anahtar bu kodu hata vermeden çalıştırır?

    console.log(city);
    ____ city = 'İstanbul';
    Cevabı göster
    console.log(city);
    var city = 'İstanbul';
  3. 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

Orta seviye bölümündeki tüm dersler