好像是坐车的时候想到的,代码是
function test() {
return 3 + x
}
test() // ?
const x = 10
function test() {
return 3 + x
}
const x = 10
test() // ?
问以上两段代码的 test 函数分别输出什么?
这个问题是关于作用域和TDZ的,TDZ就不具体解释了。第一个 test 运行的时候明显 x 还未到 const 的声明处,所以是 ReferenceError;第二个 test 在运行时初始化作用域,这个时候 x 已经过了 const 声明,所以输出13。
这道题目其实比较坑,有时候仔细分析容易想多,以为 test 声明的时候 x 不存在,应该报 ReferenceError,但函数的作用域其实是在运行时候初始化的。