错误处理-当JavaScript抛出ReferenceError时,其背后的逻辑是什么

error handling - What is the logic behind when JavaScript throws a ReferenceError?

本文关键字:背后 是什么 处理 JavaScript ReferenceError 抛出 错误      更新时间:2023-09-26

我已经使用JavaScript多年了,但最近一直在努力增加我对该语言的深入了解。当JavaScript抛出ReferenceError时,我有点困惑背后的逻辑是什么。

例如,这些都没有抛出referenceError,但仍然将undefined写入控制台:

function foobar(foo)
{
    var bar = foo;
    console.log(bar);
}
foobar();

var foo = undefined;
var bar = foo;
console.log(bar);

var foo;
var bar = foo;
console.log(bar);

但这显然会在没有写入控制台的情况下在第一行引发ReferenceError错误:

var bar = foo;
console.log(bar);

因此,在参数列表中包含一个变量或声明它似乎可以阻止抛出referenceError,即使该变量仍然是"未定义的"。

有人知道幕后发生了什么吗?或者围绕这件事的硬性规定是什么?有人知道为什么这些不被视为参考错误吗?

使用存在但具有undefined值的变量和使用不存在且从未声明的变量是有区别的。

后者将在您试图引用不存在且尚未声明的内容时创建引用错误。

另一方面,当你进行时

var foo;

foo确实存在,并且它已经被声明,它的值只是undefined,所以你仍然可以引用它而不会抛出错误。

换句话说,试图引用尚未声明的变量将引发引用错误,而引用已声明的变量永远不会引发引用错误——无论是否为该变量设置了值。