# let 與 const
## ==常用的 var 會有甚麼情況==
* 通常我們在宣告變數前都是常用到 **var**那為何要用到 **let** 與 **const**,因為在用var時 ==作用域==的關係會造成以下這個範例、若同名變數 後面變數將會覆蓋前面的變數
```javascript=
var err = [1,2,3]
if (true) {
var err = [];
}
console.log(err);
```
* 這時log顯示最後的變數空的陣列

* 那==let==會用甚麼差異呢? 假使我們let作用域使用在if { 範圍 }以內的話
```javascript=
var err = [1,2,3]
if (true) {
let err = [];
}
console.log(err);
```
* 這時外層的log就會顯示外層的全域變數了

## ==const 常數差異與特性==
* const 設定後若要做變更的話,後面將會出錯
```javascript=
if (true) {
const text = 0;
text = 2;
console.log(text);
}
```

<div class="alert alert-success text-center" >
const 會用到甚麼時機,例如Dom元素是唯一值無法更改時
</div>
```javascript=
<div id=add></div>
<script>
const add = document.getElementById('#app');
</script>
```
<div class="alert alert-danger text-center" >
const 有甚麼時機有例外可以改變 ?
</div>
* const 在物件與陣列型態時是可以加入值或改變的
```javascript=
const err = [];
const obj = { name:"Bryan" };
err.push('Mars')
obj.name = "soso"
console.log(err);
console.log(obj);
```

{"metaMigratedAt":"2023-06-16T11:26:32.354Z","metaMigratedFrom":"YAML","title":"let 與 const","breaks":true,"contributors":"[{\"id\":\"c05b36ac-d774-4e45-8fc3-5e50c9be5123\",\"add\":1309,\"del\":10}]"}