好像是坐车的时候想到的,代码是

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,但函数的作用域其实是在运行时候初始化的