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)
}