好像是坐车的时候想到的,代码是
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
,但函数的作用域其实是在运行时候初始化的。