letとvarの違い

10233 ワード

ES 6追加のlet:
  • は最上階の対象window
  • に属さない.
  • 重複した声明は許されない.
  • 変数アップ
  • が存在しません.
  • 一時性死区:先に定義して、後で
  • を使います.
  • ブロック級作用領域
  • ES 5のvar:
  • は最上階の対象window
  • に属します.
  • は、ステートメントの繰り返しを可能にし、後のステートメントは、前のステートメントの値
  • を置き換える.
  • 存在変数アップ
  • 一時性死区がありません.
  • 関数領域
  •   for (var i = 0; i < 3; i++) {
         
                console.log(i); // 0 1 2
                console.log(this.i) // 0 1 2
            }
            console.log(i) // 3  var   window, for   i=3       for   
            for (let i = 0; i < 3; i++) {
         
                console.log(i); // 0 1 2
                console.log(this.i) // undefined let   window
            }
            console.log(i) // error       
            for (var i = 0; i < 3; i++) {
         
                setTimeout(() => {
         
                    console.log(i) //     3 3 3
                    console.log(this.i) //     3 3 3
                })
            }
            console.log(i) //      3
            for (let i = 0; i < 3; i++) {
         
                setTimeout(() => {
         
                    console.log(i) //     0 1 2
                    console.log(this.i) //    undefined
                })
            }
            console.log(i) //      error i not undefined
            for (let i = 0; i < 3; i++) {
         
                (function () {
         
                    setTimeout(() => {
         
                        console.log(i) //     0 1 2
                        console.log(this.i) //     undefined
                    }, 1000)
                })()
            }
            for (var i = 0; i < 3; i++) {
         
                (function () {
         
                    setTimeout(() => {
         
                        console.log(i) //      3 3 3
                        console.log(this.i) //      3 3 3 
                    }, 1000)
                })()
            }
    
    ノックして理解します.