let,const的一些特點
- 使用let或者const定義會形成塊級作用域,一個{}就是一個作用域
- let,const沒有與解析
- 同一個作用域下不能同時定義同一個變量
- for循環時使用let來定義變量
let arr = [1,2,3,4,5] for (let i = 0, len = arr.length; i < len; i++) { console.log(i) // 0 1 2 3 4 } alert(i) // 報錯,i is not defined
從以上兩段代碼中可以看出來在for循環的過程中使用let定義的變量i的時候,()也形成了一個作用域,該作用域是 { } 裡邊的一個父級作用域let arr = [1,2,3,4,5] for (let i = 0, len = arr.length; i < len; i++) { let i = 'i 是否已經被定義了?' console.log(i) // 此時代碼并沒有報錯,證明let i = 0 和let i = 'i 是否已經被定義了?'并沒有在同一個作用域下 }
- 暫時性死區(TDZ):let,const定義變量的時候沒有變量的聲明提升,是以在定義這個變量之前是不能對這個變量進行操作的
// 暫時性死區 a = 30; // 暫時性死區開始(ReferenceError) alert(a) // ReferenceError alert(b) // ReferenceError let a = 10; // 暫時性死區結束 let b = 20;
- const定義的變量不能再次重新被指派
- 使用const定義變量的時候必須指派
const a ; console.log(a) // SyntaxError: Missing initializer in const declaration