Kalau kamu baru mulai belajar JavaScript, salah satu hal pertama yang membingungkan adalah: kenapa ada tiga cara untuk mendeklarasikan variabel — var, let, dan const? Jawaban singkatnya: ketiganya lahir di era berbeda, dan let/const dibuat untuk memperbaiki masalah yang muncul dari var. Artikel ini membahas perbedaannya satu per satu, lengkap dengan contoh kode, supaya kamu tahu kapan harus pakai yang mana.
var adalah cara paling lama untuk mendeklarasikan variabel di JavaScript, sudah ada sejak bahasa ini diciptakan. let dan const baru ditambahkan pada standar ES6 (2015) untuk mengatasi beberapa perilaku var yang sering membingungkan dan menyebabkan bug.
Secara sederhana:
var — deklarasi lama, scope-nya function-level, bisa dideklarasikan ulang.let — deklarasi modern untuk nilai yang bisa berubah, scope-nya block-level.const — deklarasi modern untuk nilai yang tidak di-reassign, scope-nya juga block-level.Ketiganya tetap valid dipakai di JavaScript modern, tapi praktik terbaik saat ini adalah memakai const sebagai default, lalu let bila nilainya memang perlu berubah, dan menghindari var kecuali ada alasan khusus (misalnya mengelola kode lama).
Ini perbedaan paling penting. var punya function scope — artinya variabel var hanya "terkurung" oleh function tempat dia dideklarasikan, bukan oleh blok kode seperti if atau for.
if (true) {
var nama = "Andi";
}
console.log(nama); // "Andi" — bisa diakses di luar blok if!
if (true) {
let kota = "Jakarta";
}
console.log(kota); // ReferenceError: kota is not defined
Variabel let dan const punya block scope — mereka hanya hidup di dalam { } tempat mereka dideklarasikan, entah itu if, for, while, atau blok kode biasa. Inilah salah satu sumber bug klasik pemula: variabel var yang "bocor" keluar blok dan tidak sengaja menimpa nilai lain.
Semua deklarasi variabel di JavaScript mengalami hoisting — secara teknis dipindahkan ke atas scope-nya sebelum kode dieksekusi. Tapi var, let, dan const memperlakukan hoisting secara berbeda.
console.log(a); // undefined (bukan error)
var a = 10;
console.log(b); // ReferenceError
let b = 20;
Variabel var yang di-hoist otomatis bernilai undefined sebelum baris deklarasinya tereksekusi, jadi tidak error meski dipanggil lebih dulu — hanya hasilnya undefined. Sementara let dan const juga di-hoist, tapi berada di "temporal dead zone": memanggilnya sebelum baris deklarasi akan melempar ReferenceError. Perilaku ini sebenarnya lebih aman karena memaksa kamu mendeklarasikan variabel sebelum memakainya — mencegah salah satu kesalahan umum pemula coding.
Ini perbedaan utama antara let dan const. Variabel let bisa diisi ulang (reassign) kapan saja:
let skor = 10;
skor = 20; // boleh
Sedangkan const mengikat nama variabel ke nilai itu secara permanen — mencoba reassign akan error:
const namaPengguna = "Budi";
namaPengguna = "Citra"; // TypeError: Assignment to constant variable.
Penting dipahami: const mencegah reassignment, bukan membuat objeknya benar-benar tidak bisa diubah (immutable). Kalau nilainya berupa object atau array, isi di dalamnya masih bisa diubah:
const profil = { nama: "Dewi", level: 1 };
profil.level = 2; // ini boleh, karena hanya mengubah properti
console.log(profil); // { nama: "Dewi", level: 2 }
profil = {}; // ini yang dilarang — mengganti seluruh referensi object
Tips: jadikan
constsebagai pilihan default untuk semua variabel. Ganti kelethanya kalau kamu tahu nilainya memang akan berubah nanti (misalnya counter dalam loop). Kebiasaan ini membuat kode lebih mudah dibaca karena orang lain langsung tahu mana nilai yang tetap dan mana yang dinamis.
var mengizinkan deklarasi ulang dengan nama yang sama di scope yang sama tanpa error — yang justru berisiko menimpa nilai tanpa disadari:
var status = "aktif";
var status = "nonaktif"; // tidak error, tapi rawan bug
let dan const melarang ini secara tegas:
let status = "aktif";
let status = "nonaktif"; // SyntaxError: Identifier 'status' has already been declared
Aturan ini sebenarnya membantu — error langsung muncul saat development, bukan menjadi bug tersembunyi yang baru ketahuan saat aplikasi sudah berjalan.
Supaya lebih mudah diingat, berikut ringkasannya:
var → function-level, let/const → block-level.var → di-hoist jadi undefined, let/const → di-hoist tapi di temporal dead zone (error bila dipanggil sebelum deklarasi).var dan let → boleh, const → tidak boleh.var → boleh (berisiko), let/const → tidak boleh (lebih aman).const sebagai default, let bila nilai berubah, hindari var di kode baru.Untuk proyek JavaScript modern — baik vanilla JS, Node.js, maupun framework seperti React — konvensi yang dipakai mayoritas tim dan tercermin di banyak style guide adalah:
const untuk semua deklarasi.let hanya jika ada kebutuhan nyata untuk reassign nilainya.var kecuali kamu sedang membaca atau memelihara kode lama yang masih memakainya.Mengikuti urutan ini membuat kode lebih predictable: ketika seseorang membaca const, mereka langsung tahu nilainya tidak akan berubah di sepanjang scope tersebut — mengurangi kemungkinan bug dan memudahkan debugging, terutama saat proyek mulai membesar.
Memahami perbedaan let, const, dan var ini adalah salah satu fondasi paling dasar sebelum melangkah ke konsep JavaScript yang lebih lanjut, seperti closure, function, atau bekerja dengan API. Kalau kamu ingin membangun pemahaman ini secara terstruktur dari awal, kamu bisa mulai belajar gratis lewat pelajaran interaktif Ruangkode yang dilengkapi XP, streak harian, dan latihan langsung di browser — atau lihat semua course untuk menemukan jalur belajar JavaScript yang sesuai levelmu.
Terapkan yang kamu baca lewat challenge interaktif di Ruangkode.
Mulai belajar gratis