在 ES6 之前 JavaScript 沒有區塊域的概念,因此經常使用 var
來宣告變數,
而造成區域變數覆蓋到全域變數,因此才有 let
、const
來避免此狀況產生。
let
用法就跟 var
沒有差別,但作用域只在括號內,讓我們看個經典例子來瞭解
1 | for (var i = 0; i < 3; i++) { |
我們會發現出來的結果是 這執行第3次
,而不是我們要的結果,
因為 var
宣告 i
會變成全域變數,造成 for
迴圈累加,
在 setTimeout
實際執行時只會拿到 3 這個數字。
此時在查找 i
,發現 i=3
,疑~🧐 不是只會作用在函式裡嗎?
怎麼 window 也讀得到?
用 let
改寫
1 | for (let i = 0; i < 10; i++) { |
我們會發現結果會依序跑出,且查找i
,
顯示 Uncaught ReferenceError: i is not defined
,i
變數未被宣告,因為 let
作用域只在括號內。
const
是宣吿一個常數,且必須一定要有值,不可被更改。
1 | const a=1; |
物件是例外
因為物件是傳址而不是傳值
1 | const CLOTHES ={ |
盡量少用
var
用let
、const
做取代const
可以宣告不太會更動的內容。ex: DOM 、物件、apiconst
常數可以用大寫,以利區分