此代码按预期打印" undefined"
console.log(foo());
function foo() {
return typeof a;
}
这一个与&#34崩溃; a未定义"错误:
const a = foo();
function foo() {
return typeof a;
}
这是V8的错误还是预期的行为?
答案 0 :(得分:5)
来自the spec
变量是在实例化包含词法环境时创建的,但在评估变量的LexicalBinding之前可能无法以任何方式访问它们。
您正在尝试在评估LexicalBinding的过程中访问它,这是禁止的。
答案 1 :(得分:0)
看,有一个指向对方的圆形。一个叫foo,foo需要一个。那么,会发生什么?
查看它的最简单方法:=符号首先执行右侧;然后将结果返回给要求=。
的人所以先执行foo,然后将结果赋给var a ...但是const a还不存在,而foo正在执行。