• var 存在变量提升的情况,即 var 声明会被提升至该作用域的顶部,但是他们的赋值并不会。而 constlet 并不存在这种情况,他们被赋予了 Temporal Dead Zones, TDZ, 了解 typeof 不再安全很重要

      function example () {
        console.log(notDefined)   // => throws a ReferenceError
      }
      
      function example () {
        console.log(declareButNotAssigned)  // => undefined
        var declaredButNotAssigned = true
      }
      
      function example () {
        let declaredButNotAssigned
        console.log(declaredButNotAssigned)   // => undefined
        declaredButNotAssigned = true
      }
      
      function example () {
        console.log(declaredButNotAssigned)   // => throws a ReferenceError
        console.log(typeof declaredButNotAssigned)  // => throws a ReferenceError
        const declaredButNotAssigned = true
      }
    • 匿名函数的变量名会提升,但函数内容不会

      function example () {
        console.log(anonymous)  // => undefined
      
        anonymous() // TypeError: anonymous is not a function
      
        var anonymous = function () {
          console.log('test')
        }
      }
    • 命名的函数表达式的变量名会被提升,但函数名和函数函数内容并不会

      function example() {
        console.log(named)  // => undefined
      
        named()   // => TypeError named is not a function
      
        superPower()  // => ReferenceError superPower is not defined
      
        var named = function superPower () {
          console.log('Flying')
        }
      }
      
      function example() {
        console.log(named)  // => undefined
      
        named()   // => TypeError named is not a function
      
        var named = function named () {
          console.log('named')
        }
      }
    文档更新时间: 2021-05-11 16:01   作者:姚连洲