---
# System prepended metadata

title: 'Javascript:  const let var'

---

# Javascript:  const let var 

>在學習的道路上，各個領域都會想精進一下，JS是一個前端工程師不可或缺的技能
>宣告變數的使用方式、型態更是基本中的基本。今天就要來分享一下傳統變數宣告 var 與 >JavaScript ES6 新的變數宣告方式 let 與 const 有什麼不同之處。
>
>這邊用最簡單方式告訴各位

&nbsp;


# 傳統變數宣告 var



<h3>我使用vscode來做範例

![](https://i.imgur.com/F8zfOvK.jpg)

最上面用x全域變數，在ES6推出後有區塊域的概念與let寫法，避免掉var汙染全域變數的副作用</h3>


# ES6 優缺點

* 優點
    *  解決ES5的BUG與不變之處
    *  盡量避免汙染全域，維護性高，不會污染其他開發者    

* 缺點
    * 舊版瀏覽器問題:使用Babel + Gulp解決



</br>
</br>


# ES6 let 的特性

<h4>
let 用來宣告區塊裡的變數，即區域變數，所謂{區塊}指的是{xxx} <= 裡面的東西
<br></br>
使用vscode舉例

![](https://i.imgur.com/tRdqNly.jpg)

上面成果，在console結果為1與0

首先第六行 **console.log(x)** 的結果為 1，因為 a 在第五行的時候，被重新賦予值為 1

最下面的 **console.log(x)** 的答案為何不是1

因為在 **btn(){xxx}** 裡面x只為存活在{} <= 大括號裡面
不會去改變外面x的值，因此第二個 **console.log(x)** 傳0的結果

</h4>


# ES6 const 的特性

<h4>const 是唯獨變數(不能做修改)，用在一些不能被跟改的變數 如:url網址，計算等等
<br></br>
有個例外，就是{物件}跟{陣列}會被變更，可以使用freeze()解決

![](https://i.imgur.com/dEuSbJb.jpg)

如果拿掉會被更改

![](https://i.imgur.com/MlrHinN.jpg)

有哪些情況會想要使用 **freeze()** 通常是預設不想被其他東西干擾時候， 可以使用const與freeze (物件陣列)特性
</h4>


# const let var 同個區塊 不能重複命名

<h4>
使用vscode來示範

![](https://i.imgur.com/fQUOlZT.jpg)
![](https://i.imgur.com/1bqqLQE.jpg)
![](https://i.imgur.com/X9HGLBq.jpg)

在照片看的出來，使用let const 會顯示x被賦予值
var 可以重新被賦予新的值
</h4>

# 總結

在ES6推出之後，寫JavaScript時可以使用let與const

這麼做除了逼免var會汙染到全域，也可以增加代碼的解讀性，

看到const宣告變數時，就知道這個是變數不能做改變的# Javascript:  const let var 

>在學習的道路上，各個領域都會想精進一下，JS是一個前端工程師不可或缺的技能
>宣告變數的使用方式、型態更是基本中的基本。今天就要來分享一下傳統變數宣告 var 與 >JavaScript ES6 新的變數宣告方式 let 與 const 有什麼不同之處。
>
>這邊用最簡單方式告訴各位

&nbsp;


# 傳統變數宣告 var



<h3>我使用vscode來做範例

![](https://i.imgur.com/F8zfOvK.jpg)

最上面用x全域變數，在ES6推出後有區塊域的概念與let寫法，避免掉var汙染全域變數的副作用</h3>


# ES6 優缺點

* 優點
    *  解決ES5的BUG與不變之處
    *  盡量避免汙染全域，維護性高，不會污染其他開發者    

* 缺點
    * 舊版瀏覽器問題:使用Babel + Gulp解決



</br>
</br>


# ES6 let 的特性

<h4>
let 用來宣告區塊裡的變數，即區域變數，所謂{區塊}指的是{xxx} <= 裡面的東西
<br></br>
使用vscode舉例

![](https://i.imgur.com/tRdqNly.jpg)

上面成果，在console結果為1與0

首先第六行 **console.log(x)** 的結果為 1，因為 a 在第五行的時候，被重新賦予值為 1

最下面的 **console.log(x)** 的答案為何不是1

因為在 **btn(){xxx}** 裡面x只為存活在{} <= 大括號裡面
不會去改變外面x的值，因此第二個 **console.log(x)** 傳0的結果

</h4>


# ES6 const 的特性

<h4>const 是唯獨變數(不能做修改)，用在一些不能被跟改的變數 如:url網址，計算等等
<br></br>
有個例外，就是{物件}跟{陣列}會被變更，可以使用freeze()解決

![](https://i.imgur.com/dEuSbJb.jpg)

如果拿掉會被更改

![](https://i.imgur.com/MlrHinN.jpg)

有哪些情況會想要使用 **freeze()** 通常是預設不想被其他東西干擾時候， 可以使用const與freeze (物件陣列)特性
</h4>


# const let var 同個區塊 不能重複命名

<h4>
使用vscode來示範

![](https://i.imgur.com/fQUOlZT.jpg)
![](https://i.imgur.com/1bqqLQE.jpg)
![](https://i.imgur.com/X9HGLBq.jpg)

在照片看的出來，使用let const 會顯示x被賦予值
var 可以重新被賦予新的值
</h4>

# 總結
<h4>

在ES6推出之後，寫JavaScript時可以使用let與const

這麼做除了逼免var會汙染到全域，也可以增加代碼的解讀性，

看到const宣告變數時，就知道這個是變數不能做改變的

用圖片的範例比較多，可以增加讀者方便閱讀 謝謝~
</h4>