# Apa Bedanya keyword var dan let dalam JavaScript?

Javascript memilik dua cara dalam membuat atau mendeklarasikan variabel. yaitu kita bisa menggunakan keyword `var` dan `let`. antara `var` dan `let` memiliki tujuan dan fungsi yang sama, namun memiliki perbedaan dalam karakteristik dan sifat.

## Ruang Lingkup

perbedaan yang paling mendasar adalah dari ruang lingkup atau scope yang di milikinya. `let` memiliki ruang yang lebih sempit dari pada `var`.

### Block Scope

`let` memiliki *block scope*, artinya variabel yang di buat dengan keyword tersebut hanya dapat di akses di dalam blok kode di mana ia di deklarasikan. perhatikan pada contoh kode berikut ini.

```javascript
 if (true){
     let messageLet = "this let";

    // akses variabel let di blok kode if
     console.log(messageLet) // output: "this let" 
}

// akses variabel let di luar blok if
console.log(messageLet); // ReferenceError: messageLet is not defined
```

perhatikan pada contoh di atas. variabel `messageLet` akan error jika di akses di luar blok if, di mana variabel tersebut di deklarasikan. namun tidak terjadi error jika di akses di dalam blok if di mana itu masih di dalam ruangnya. ini tidak hanya berlaku dalam blok if, namun juga di dalam kode lainnya. misalnya di dalam blok fungsi, perulangan dan atau bahkan hanya di dalam blok kurung kurawal saja.

```javascript
{
    let messageLet = "ini di dalam blok kurung kurawal";
    console.log(messageLet) // output: "ini di dalam blok kurung kurawal"
}

console.log(messageLet) //ReferenceError: messageLet is not defined
```

### Function Scope

`var` memiliki *function scope*, artinya, ketika sebuah variabel di deklarasikan di dalam blok fungsi, maka ia hanya memilik jangkauan pada area itu saja. dengan itu, maka kita hanya dapat mengakses variabel tersebut di dalam fungsi di mana ia di deklarasikan.

```javascript
function cetak(){
    var message = "di dalam fungsi";
    console.log(message);
}
cetak();
console.log(message); //ReferenceError: message is not defined
```

pada contoh kode di atas, pemanggilan fungsi object `console.log(message)` setelah pemanggilan fungsi `cetak()` akan terjadi error. karena mencoba mengakses variabel yang sebenarnya tidak tersedia.

### let lebih aman !

`let` juga lebih aman di bandingkan dengan `var` bukan hanya di lihat dari scopenya saja. `let` mencegah adanya redeclare variabel.

```javascript
let message = "hello world";
let message = "test"; 
```

jika kamu jalankan kode di atas, maka akan terjadi error. jadi untuk saat ini lebih di rekomendasikan menggunakan `let` ya !
