---
# System prepended metadata

title: '[ES6] let、const變數'
tags: [ES6]

---

# [ES6] let、const變數
###### tags: `ES6`


### 新增let、const變數宣告

ES6釋出let與const來解決使用Var變數命名會汙染到window全域變數的問題，

* let與const是用來宣告區塊裡的變數，區塊是指程式碼{}的部分。

```
<script>
    if(2>1){
    let a =3
    }
</script>
```



#### 與Var差異觀念

* var變數會向上提升，如果沒有命名變數也會顯示undefined，而let與const則不會
* 同個區塊不可重複命名
```
var a = 3;
var a = 5;

//結果會等於5

let a = 3;
let a = 5;

//結果顯示錯誤，因重複宣告變數
```

* 常數const: 裝入東西(值)之後就上鎖的盒子，之後不可以再更動裡面的值，const 是唯獨變數，不能被修改，當重要檔案不能被變更如url網址，就適合使用唯獨變數。但如果是在陣列[]或者物件{}內仍可以被變更
* 變數let: 暫時存放值的盒子，盒子是打開的，可以更動裡面的值

<hr>

### let與var的差異：
作用域不一樣，var的作用域在函數 (function) 裡，let的作用域則是在區塊 (block) 裡。


我們必須知道JavaScript有兩個範圍：全域與區域。

* 全域變數：在函式作用域(function scope)之外宣告的變數，全域變數在整個程式中都可以被存取與修改。
* 區域變數：在函式作用域(function scope)內宣告，每次執行函式時，就會建立區域變數再予以摧毀，而且函式之外的所有程式碼都不能存取這個變數。


let、const是ES6之後加入的新成員，其作用的範圍跟var有些差異。

* let與const是區塊作用域(block scope)
* var是函式作用域(function scope)

「使用var宣告變數，可用範圍以function為界，function外讀不到值」，但如果使用區塊語句像if, else, for, while等等區塊語句時，宣告的區域變數仍然可在整段程式碼做存取，這並不是我們希望的結果。這時候就會用到let。


