Lompat ke konten
Kembali ke modul

JavaScript: Bahasanya · 3/12

Variable, scope, dan hoisting

Di mana sebuah nama terlihat, kapan ia ada, dan kenapa `var` digantikan `let` dan `const`.

Baca 25 menit

Setelah pelajaran ini kamu bisa

  • Memilih antara `const` dan `let` tanpa perlu berpikir lama
  • Menjelaskan apa itu block scope dan di mana sebuah nama terlihat
  • Menjelaskan hoisting dan temporal dead zone
  • Menjelaskan kenapa `var` tidak dipakai di kode baru

Variable adalah nama yang menunjuk ke sebuah value. Scope adalah wilayah kode di mana nama itu terlihat. Sebagian besar error "undefined is not a function" sebenarnya salah paham soal scope.

Aturannya: const dulu

  • Pakai const sebagai default. Artinya nama itu tidak akan pernah menunjuk value lain.
  • Pakai let hanya kalau kamu benar-benar menugaskan ulang — penghitung loop, akumulator.
  • Jangan pakai var di kode baru. Aturan scope-nya berbeda dan menimbulkan bug.
Coba sendiri

Hasil

Tekan Jalankan untuk melihat hasilnya.

Ini jalan di browser kamu, di dalam sandbox. Apa pun yang kamu tulis di sini tidak bisa merusak situs.

Block scope

Block adalah apa pun di antara { dan } — badan function, sebuah if, sebuah loop. let dan const hanya terlihat di dalam block yang mendeklarasikannya. var mengabaikan block sepenuhnya dan merembes ke seluruh function.

Coba sendiri

Demonstrasi klasik kenapa var digantikan. Tebak dulu output-nya sebelum menjalankan.

Hasil

Tekan Jalankan untuk melihat hasilnya.

Ini jalan di browser kamu, di dalam sandbox. Apa pun yang kamu tulis di sini tidak bisa merusak situs.

Hoisting dan temporal dead zone

Sebelum menjalankan sebuah block, engine memindainya dan mencatat setiap deklarasi. Pemindaian itu disebut hoisting. Yang berbeda adalah kondisi masing-masingnya setelah itu: var dimulai sebagai undefined, sedangkan let atau const tercatat tapi tidak bisa dipakai sampai barisnya dijalankan. Celah itu disebut temporal dead zone.

Coba sendiri

Hasil

Tekan Jalankan untuk melihat hasilnya.

Ini jalan di browser kamu, di dalam sandbox. Apa pun yang kamu tulis di sini tidak bisa merusak situs.

Shadowing

Scope dalam boleh mendeklarasikan nama yang sudah ada di luar. Yang di dalam menutupi (shadow) yang di luar selama block itu. Sah, kadang berguna, dan sering jadi sumber pertanyaan "kok perubahan saya tidak ada efeknya?".

Coba sendiri

Hasil

Tekan Jalankan untuk melihat hasilnya.

Ini jalan di browser kamu, di dalam sandbox. Apa pun yang kamu tulis di sini tidak bisa merusak situs.

Tugas praktik

Tebak output dari ini, tulis dulu tebakanmu, lalu jalankan. let a = 1; { let a = 2; { let a = 3; console.log(a); } console.log(a); } console.log(a); Bisa menebak ini dengan tepat itulah keahlian yang dimaksud.

Hasil yang diharapkan

3, lalu 2, lalu 1