Typeof由变量初始化程序击败

时间:2016-09-14 07:49:13

标签: javascript

此代码按预期打印" undefined"

console.log(foo());

function foo() {
  return typeof a;
}

这一个与&#34崩溃; a未定义"错误:

const a = foo();

function foo() {
  return typeof a;
}

这是V8的错误还是预期的行为?

2 个答案:

答案 0 :(得分:5)

来自the spec

  

变量是在实例化包含词法环境时创建的,但在评估变量的LexicalBinding之前可能无法以任何方式访问它们。

您正在尝试在评估LexicalBinding的过程中访问它,这是禁止的。

答案 1 :(得分:0)

看,有一个指向对方的圆形。一个叫foo,foo需要一个。那么,会发生什么?

查看它的最简单方法:=符号首先执行右侧;然后将结果返回给要求=。

的人

所以先执行foo,然后将结果赋给var a ...但是const a还不存在,而foo正在执行。