其實原本有點猶豫要不要分享這個東西,網路上真的有太多厲害的神人分享了,
但我覺得自己其實也不是很了解這個東西,所以也決定寫一篇,順便當自己內化的過程。
第一個例子
從這個例子可以了解到
第二個例子
再來談談作用域
let 跟 const 都是屬於區塊作用域
而var則是函式作用域,甚至可以是全域的效果
何謂區塊作用域
也就是{} <===這個玩意
相對好理解很多。
直接上範例
let
let 跟 const作用域一樣,他們之間的差異是
let可以重複宣告,const不行,而且let重新宣告還滿特別的
老實說,我覺得再重新宣告一次let 好像會覺得比較一致性XD
而const 則是不管怎樣都不能重新「賦值」,而let則是可以改變「賦值」。
PS:賦值:意思是指,不會改變最初所設定的變數,而是重新這個變數賦值的意思
如圖
如果對方是object的話,情況又不太一樣了
上圖!
因為我們是更改物件裡面的值,而不是更改物件本身,也就是說在物件的狀況let 跟 const 都可以改變其內容的值
var 函式作用域+全域
懶人包:如果需要重新賦值 => let
誰都不要給我動初始值 => const
var呢?....老實說...他搞得我也好亂啊,ES6之後找不到適合他的地方惹
好了,除了我自己內化的過程,也希望各位小夥伴也能更近一步知道變數提升是什麼玩意了
我自己理解起來是有兩個關鍵
關於第一點,上圖已經有稍微分享到我目前的認知了,至於第二個特性不囉唆
上圖
也就是說因為有向外尋找的特性,即使let只在區塊內作用域,但是當區塊內沒有的時候,他也會往外層去尋找有沒有相同的變數
所以結果才會是10,而不是預期的
ReferenceError: a is not defined
當然 如果我們把最外層let a = 10 註解掉,那就真的會出現上述的錯誤了
嘗試在搜集一些資料後,用自己的理解再把他打出來分享給大家,也希望能夠幫助大家多一點初步的理解。
參考資料