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
constsebagai default. Artinya nama itu tidak akan pernah menunjuk value lain. - Pakai
lethanya kalau kamu benar-benar menugaskan ulang — penghitung loop, akumulator. - Jangan pakai
vardi kode baru. Aturan scope-nya berbeda dan menimbulkan bug.
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.
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.
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?".
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