我读过很多文章,说编译(创建)阶段首先发生在全局执行上下文中,然后执行代码,当调用函数时,创建阶段然后再次开始该函数,然后执行,这真的是发生了什么吗?为什么创建阶段没有发生在所有代码中,首先包括函数内的变量,然后执行所有代码,因为像这样,创建阶段是执行阶段本身的一部分,引擎在执行之前不知道函数内有哪些变量阶段 另外,如果是这样,为什么这样的事情会在不先登录到控制台的情况下给出错误
console.log('First No Error')
function Error() {
let a = 2
console.log(z)
}
Error()Run Code Online (Sandbox Code Playgroud)
它给出了参考错误,因为 z 没有定义而没有登录到控制台(无错误),为什么会发生这种情况,因为引擎不应该知道函数内部存在错误,直到它只在最后一行执行。
我想知道函数内部已知什么,并且可以在执行函数本身之前使用它(即使它只是内存中没有实际数据的引用以及何时成为内存中的实际数据)。