DEV Community

Cover image for Menguak Fenomena Hoisting di JavaScript: Kenapa Variabel dan Fungsi Bisa 'Naik' Sendiri?
Yoga Meleniawan Pamungkas
Yoga Meleniawan Pamungkas

Posted on • Updated on

Menguak Fenomena Hoisting di JavaScript: Kenapa Variabel dan Fungsi Bisa 'Naik' Sendiri?

Image description

Hoisting di JavaScript adalah konsep dimana deklarasi variabel dan fungsi dipindahkan (atau "diangkat") ke bagian atas dari lingkup mereka masing-masing selama fase kompilasi. Ini berarti bahwa kita bisa menggunakan variabel dan fungsi sebelum mereka dideklarasikan di dalam kode kita, karena JavaScript secara otomatis "mengangkat" deklarasi tersebut ke bagian atas.

Nah, biar lebih jelas, bayangin kamu lagi ngegame. Di game itu, semua senjata yang bisa kamu pake udah disiapin di tas kamu sebelum game mulai, meskipun kamu baru ngecek tasnya nanti. Jadi, pas kamu lagi main dan butuh senjata, kamu tinggal ambil aja dari tas tanpa perlu khawatir nyari-nyari lagi.

Contoh Hoisting

1. Hoisting pada Variabel dengan var

console.log(myVar); // Output: undefined
var myVar = 10;
console.log(myVar); // Output: 10

Enter fullscreen mode Exit fullscreen mode

Penjelasan:

Di sini, JavaScript "mengangkat" deklarasi var myVar ke bagian atas lingkupnya, tapi inisialisasinya (nilai 10) tetap di tempat aslinya.
Jadi, pada baris pertama, myVar sudah dideklarasikan tapi belum diinisialisasi, makanya output-nya undefined.

2. Hoisting pada Fungsi

myFunction(); // Output: "Hello World"

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

Enter fullscreen mode Exit fullscreen mode

Penjelasan:

Fungsi myFunction dideklarasikan dan diangkat sepenuhnya ke bagian atas scope, termasuk body-nya.
Makanya, kita bisa manggil myFunction sebelum deklarasinya di dalam kode.

Hoisting pada let dan const

Variabel yang dideklarasikan dengan let dan const juga dihoist, tapi mereka masuk ke dalam "temporal dead zone" sampai inisialisasi mereka dieksekusi. Artinya, meskipun deklarasinya diangkat, temen-temen gak bisa akses mereka sebelum inisialisasi.

Contoh let dan const

console.log(myLetVar); // Error: Cannot access 'myLetVar' before initialization
let myLetVar = 20;

console.log(myConstVar); // Error: Cannot access 'myConstVar' before initialization
const myConstVar = 30;

Enter fullscreen mode Exit fullscreen mode

Penjelasan:

Di sini, JavaScript juga mengangkat deklarasi let myLetVar dan const myConstVar ke atas scope mereka, tapi mereka berada dalam "temporal dead zone" sampai baris inisialisasinya dicapai.
Makanya, akses ke variabel ini sebelum inisialisasi akan menyebabkan error.

Alasan Menggunakan Hoisting

Hoisting bisa bikin kode lebih fleksibel karena kita bisa mendeklarasikan fungsi di mana aja tanpa harus khawatir urutan kode. Tapi, penting buat tetap menulis kode yang bersih dan terstruktur biar gak bikin bingung orang lain (atau diri sendiri) yang baca kode temen-temen.

Kesimpulan

  • Hoisting: Deklarasi variabel dan fungsi diangkat ke atas lingkup mereka.
  • var: Deklarasi dihoist, tapi inisialisasi tetap di tempat aslinya (hasilnya bisa undefined).
  • let dan const: Deklarasi dihoist tapi berada dalam "temporal dead zone" sampai diinisialisasi (hasilnya error kalau diakses sebelum inisialisasi).
  • Fungsi: Deklarasi dan body dihoist sepenuhnya.

Dengan paham konsep hoisting, temen-temen bisa nulis kode JavaScript yang lebih efektif dan bebas dari bug-bug yang bikin pusing. Kurang lebih segitu dulu ya temen-temen, sampai ketemu di artikel lainnya!!!

Top comments (0)