ES6: var, let dan const

Teknologi.id . March 27, 2018

Udemy
Artikel ini merupakan repost dari artikel Sigit Hanafi. Baca artikel sumber.

ES6: var, let dan const

Pada ES5, kita hanya mengenal satu cara untuk mendeklarasikan variabel yaitu dengan sintak var, pada ES6 kita akan mengenal tiga sintak untuk mendeklarasikan variabel. Sintak tersebut adalah var, let dan const.

Jadi, apa bedanya ketiga sintak tersebut? Mari kita bahas satu persatu.

Var

Jika kita mempunyai sebuah kode perulangan seperti berikut :

for (var i = 0; i < 5; i++) {
  console.log(i) // 0 1 2 3 4
}
console.log('after loop', i) // this i = 5

Kode baris terakhir akan menampilkan keluaran berupa teks “after loop 5”. Padahal variabel i hanya di deklarasikan pada perulangan for. Hal ini disebabkan karena pada JavaScript, sintak var berjalan pada cakupan fungsi (function scope). Yang artinya, variabel yang kita deklarasikan di dalam sebuah fungsi akan dapat kita gunakan asalkan masih dalam skope fungsi tersebut.

Untuk membuktikannya, mari kita bungkus kode di atas dalam sebuah fungsi.

function counter () {
  for (var i = 0; i < 5; i++) {
    console.log(i)
  }
}
counter()
console.log('after loop', i) // this i is undefined

Jika kita jalankan kode tersebut, kita akan mendapatkan pesan error “ReferenceError: i is not defined” yang menunjukkan bahwa variabel i yang sudah dideklarasikan dalam fungsi counter hanya dapat diakses di dalam fungsi counter saja.

Lalu, bagaimana jika di dalam fungsi counter terdapat scope lain seperti conditional statement atau fungsi baru? Mari kita coba dulu.

Tambahkan sebuah fungsi di dalam fungsi counter sehingga kode menjadi seperti berikut:

function counter () {
  for (var i = 0; i < 5; i++) {
    console.log(i)
  }
  var afterLoop = function () {
    console.log('after loop inside function = ', i) // i = 5
  }
  afterLoop()
}
counter()
console.log('after loop', i) // this i is undefined

Fungsi afterLoop di dalam fungsi counter , memanggil variablel i, yang hasilnya adalah “after loop inside function = 5”.

Kesimpulan dari sintak var adalah Terbukti, bahwa sintak var mempunyai cakupan dalam sebuah fungsi (function scope).

Let

Untuk mencari tahu tentang sintak let, saya akan membuat kode perulangan seperti pada kasus pertama. Akan tetapi, pada kode kali ini saya menggunakan sintak let i.

for (let i = 0; i < 5; i++) {
  console.log(i) // 0 1 2 3 4
}
console.log('after loop', i) // this i is undefined

Berbeda dengan sintak var, jika kode tersebut dijalankan akan menghasilkan eror berupa “ReferenceError: i is not defined” yang menunjukkan bahwa variabel i belum dideklarasikan. Padahal variabel i sudah saya deklarasikan pada perulangan for. Hal ini disebabkan karena sintak let merupakan block scope.

Saya akan modifikasi kode sebelumnya dengan menambahkan satu scope lagi di bawah perulangan for.

for (let i = 0; i < 5; i++) {
  console.log(i) // 0 1 2 3 4
}
if (true) {
  let i = 1000
  console.log(i) // this i = 1000
}
console.log('after loop', i) // this i is undefined

Jika saya jalankan kode tersebut, tetap saja variabel i pada baris terakhir mengakibatkan eror “ReferenceError: i is not defined”.

Dari dua kasus di atas, menunjukkan bahwa sintak let mempunyai cakupan blok (block scope). Scope pada kasus ini ditandai dengan tanda { …….. }.

Const

Lalu bagaimana dengan sintak const ?

Const mempunyai sifat yang sama seperti let hanya saja, jika kita mendeklarasikan variabel dengan sintak const, kita tidak dapat me-reassigned nilai dari variabel tersebut.

Untuk memperjelas perbedaan let dan const, saya membuat kode berikut ini:

if (true) {
  let i = 10
  i = 2
  console.log(i) // this i = 2
}
if (true) {
  const i = 10
  i = 2
  console.log(i) // this i = 10
}

Pada kondisi pertama (dengan menggunakan sintak let), hasil akhir dari variabel i adalah 2.

Sedangkan pada kondisi kedua (dengan menggunakan sintak const), akan menghasilkan eror “TypeError: Assignment to constant variable.” yang menunjukkan bahwa variabel i tidak dapat di reassigned.


Kesimpulan

Sintak let menunjukkan bahwa sebuah variabel dapat di-reassigned dan hanya bisa diakses dalam satu blok (block scope)

Sintak const bersifat sama dengan let, hanya saja variabel yang dideklarasikan dengan sintak const tidak dapat di-reassigned.

Sintak var menunjukkan bahwa variabel yang dideklarasikan dengan sintak var dapat di-reassigned dan dapat digunakan di dalam lingkup fungsi (function scope).

Terimakasih sudah membaca.

author0
teknologi id bookmark icon

Tinggalkan Komentar

0 Komentar