let, const, var 的差異|筆記 by Sz
嘿嘿我這篇還在建置中,看不懂正常,我也看不懂,但改完還是可能會看不懂,救命
- 為什麼要宣告變數
- 避免全域、區域污染
- 屬性與變數的差異
- 屬性可以被刪除 (a = 1)
- 變數無法被刪除 (var a = 1)
辭法作用域
var 的特性
function 作用域
- 在 function 內的 var,上層讀不到
- 在 {}(block) 內的 var,上層讀得到
for…
- for 設定的 var,執行後的外層會讀到結果
- 設定 var 變數的 for 內部若有 setTimeout() ,也會跟迴圈一樣執行同等次數,但都是最終結果(非同步,目前還搞不懂為什麼要這麼用)
hoisting
let 與 var 的差異
作用域不同 var function, let block
- let 的作用域只在內部
- 設定 let 的 for 內部若有 setTimeout() ,則不會在 for 執行完後才執行,會正常顯示 for 迴圈
- 不會在 window 上
不可重複宣告
hosting
- 暫時性失去
- function 已經從外部傳入參數時,又在內部重新宣告 let 參數的話,function 內部重新宣告前該參數會暫時性失去
const 與 let 不同之處
陷阱 const 與 let 的選擇
但 const 內有物件
- 物件的屬性是可以改的(物件傳參考)
- 但直接改const 成其他物件是不行的(物件傳參考)
其他
- undefined 跟 not undefined