变量初始化器失败的类型

Typeof defeated by variable initializer

本文关键字:类型 失败 初始化 变量      更新时间:2023-09-26

如下代码打印"undefined":

console.log(foo());
function foo() {
  return typeof a;
}

这个程序崩溃,并出现"a is not defined"错误:

const a = foo();
function foo() {
  return typeof a;
}

这是V8的bug还是预期的行为?

从规格

变量是在包含它们的lexicalenvironment实例化时创建的,但是在变量的LexicalBinding被求值之前不能以任何方式访问。

您试图在LexicalBinding求值的过程中访问它,这是被禁止的。

看,有一个圆互相指向对方。a调用foo, foo需要a,会发生什么?

最简单的方法是:=号首先执行右边;然后将结果返回给请求=.

的人。

首先执行foo,然后将结果赋给var a…但是const a还不存在,而foo正在执行