Skip to main content

๐Ÿš€ JavaScript Hoisting: Konsep Fundamental yang Sering Disalahpahami Developer Pemula

Published 3 min readMarkdown
๐Ÿš€ JavaScript Hoisting: Konsep Fundamental yang Sering Disalahpahami Developer Pemula

Banyak developer pemulaโ€”bahkan yang sudah bekerja profesionalโ€”masih memiliki pemahaman yang kurang tepat tentang hoisting di JavaScript. Kamu mungkin pernah melihat variabel digunakan sebelum dideklarasikan dan bertanya-tanya: โ€œKok bisa? Bukannya itu error?โ€

Pada artikel ini, kita akan membahas konsep hoisting secara komprehensif, mulai dari definisi sederhana, contoh, perilaku var, let, dan const, hingga kaitannya dengan Temporal Dead Zone (TDZ), serta bagaimana best practice yang seharusnya digunakan dalam production-level code.

๐Ÿ” Apa Itu Hoisting?

Hoisting adalah mekanisme javascript memindahkan deklarasi variable atau function ke atas scope sebelum eksekusi kode dijalankan. Secara teknis, yang di-hoist hanya deklarasi bukan assignment.

๐Ÿ“Œ Cara Kerja Hoisting pada JavaScript Engine

Sebelum kode kamu di eksekusi, javascript memilki dua fase:

  1. Creation Phase (Memory allocation)

  2. Execution Phase (Run code line by line)

Pada fase creation, semua function declaration, var, let dan const di catat dan di siapkan di memory - inilah proses yang di sebut hoisting.

Diagram singkat:

๐Ÿ“Œ Creation Phase
- var โ†’ allocated (value = undefined)
- let โ†’ allocated (no value yet โ†’ enters TDZ)
- const โ†’ allocated (must have initialization)
- function declaration โ†’ fully hoisted with body

๐Ÿงช Contoh Dasar Hoisting

โ“ Tanpa memahami hoisting

console.log(name);
var name = "Alice";

Output:

undefined

โœ”๏ธ Penjelasan sebenarnya

var name;          // hoisted
console.log(name); // undefined
name = "Alice";

๐Ÿงฉ Function Hoisting

Function declaration di-hoist sempurna, sehingga boleh dipanggil sebelum didefinisikan.

greet();

function greet() {
  console.log("Hello World!");
}

Output:

Hello World!

Namun function expression tidak di-hoist sebagai fungsi:

sayHi(); // โŒ TypeError

var sayHi = function () {
  console.log("Hi!");
};

๐Ÿ“™ Hoisting pada var vs let vs const

Behaviorvarletconst
Hoistedโœ”๏ธโœ”๏ธโœ”๏ธ
Default value during creationundefinedNo valueNo value
Accessible before declarationโœ”๏ธโŒ (TDZ)โŒ (TDZ)
Must be initializedโŒโŒโœ”๏ธ

๐Ÿ”ฅ Mengenal Temporal Dead Zone (TDZ)

let dan const memang di-hoist, tetapi berada dalam zona larangan akses yang disebut TDZ sampai interpreter menemukan deklarasinya.

console.log(age); // โŒ ReferenceError
let age = 20;

Ini terjadi karena pada saat akses, variabel sudah dideklarasikan di memory, tetapi belum aktif.

๐ŸŽญ Analogi Hoisting yang Mudah Dipahami

Bayangkan kamu masuk kelas, dan guru sudah menyiapkan daftar absensi kosong (deklarasi). Kolom nama sudah tersedia, tetapi belum ada isinya (belum assignment).
Saat kalian memperkenalkan diri, barulah kolom terisi.

  • var โ†’ kolom sudah bisa dilihat, tapi isi awal kosong (undefined)

  • let / const โ†’ kolom ada tapi tidak boleh dibuka sampai guru mulai absen


๐Ÿง  Kenapa Hoisting Ada?

Hoisting bukan bug, tapi fitur desain JavaScript yang:

  • Mendukung function-first programming style

  • Memungkinkan penggunaan function declaration di berbagai tempat

  • Memudahkan interpreter membaca kode sebelum mengeksekusinya


๐Ÿ Best Practice โ€” Clean & Predictable Code

Untuk menghindari bug dan ambiguitas:

โœ” Selalu deklarasikan variabel di awal scope
โœ” Gunakan let dan const, hindari var
โœ” Gunakan function declaration untuk utilities
โœ” Gunakan ESLint rule: no-use-before-define

Contoh kode yang disarankan:

const name = "Alice";

function greet() {
  console.log(`Hello, ${name}`);
}

greet();

๐Ÿ“Œ Kesimpulan Utama

  • Hoisting = deklarasi diangkat ke atas scope

  • var, let, const, dan function declaration semuanya di-hoist

  • var di-hoist dengan nilai awal undefined

  • let dan const berada dalam Temporal Dead Zone

  • Function declaration bisa dipanggil sebelum deklarasi

  • Function expression tidak ter-hoist sebagai fungsi

Hoisting bukan sesuatu yang harus dihindari, tapi dipahami agar tidak menulis kode yang penuh kejutan.


๐ŸŽ Bonus โ€” Satu Kalimat yang Mudah Diingat

"Hoisting mengangkat deklarasi, bukan nilai, dan bukan izin untuk memakai variabel sebelum waktunya."

No comments yet. Be the first to comment.

More from this blog