天天看點

es6之let,const的使用let,const的一些特點

let,const的一些特點

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