---
# System prepended metadata

title: let 與 const
tags: [Mike課程]

---

---
tags:  Mike課程
---


# 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)







