Skip to content

10. 暂时性死区和变量提升及函数声明提升

变量提升

使用var声明的变量和函数声明会提升到当前作用域顶部 变量被提升后,会给变量设置默认值undefined,在变量赋值之前访问不会报错。

变量提升:

js
  console.log(a) // undefined
  var a = 'aaaa'

  // 等价于

  var a = undefined
  console.log(a)
  a = 'aaaa'

函数提升(可以先执行):

js
  foo() // 123

  function foo() {
    console.log(123)
  }

函数声明提升

不同的是, 函数声明提升在提升阶段将声明和定义都完成了

优先级

函数会先被提升,然后才是变量。不会被变量声明覆盖,但是会被变量赋值覆盖。

暂时性死区

暂时性死区是指在块级作用域中,在代码块开始位置到声明变量的位置,这块区域不能访问这个变量,否则就会报错

js
  if(true) {
    /** 暂时性死区 start */
    console.log(name)
    /** 暂时性死区 end */
    let name = 'test'
  }

函数也是一样

js
 /** 暂时性死区 start */
 a()
 /** 暂时性死区 end */
 let a = function (){
  console.log(123)
 }

KESHAOYE-知识星球