# let 與 const ## ==常用的 var 會有甚麼情況== * 通常我們在宣告變數前都是常用到 **var**那為何要用到 **let** 與 **const**,因為在用var時 ==作用域==的關係會造成以下這個範例、若同名變數 後面變數將會覆蓋前面的變數 ```javascript= var err = [1,2,3] if (true) { var err = []; } console.log(err); ``` * 這時log顯示最後的變數空的陣列 ![](https://i.imgur.com/fzueXjw.png) * 那==let==會用甚麼差異呢? 假使我們let作用域使用在if { 範圍 }以內的話 ```javascript= var err = [1,2,3] if (true) { let err = []; } console.log(err); ``` * 這時外層的log就會顯示外層的全域變數了 ![](https://i.imgur.com/TwGoOqQ.png) ## ==const 常數差異與特性== * const 設定後若要做變更的話,後面將會出錯 ```javascript= if (true) { const text = 0; text = 2; console.log(text); } ``` ![](https://i.imgur.com/mWpDQ1p.png) <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); ``` ![](https://i.imgur.com/j9phur3.png)
{"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}]"}
Expand menu