繁体   English   中英

JavaScript引发ReferenceError时背后的逻辑是什么?

[英]What is the logic behind when JavaScript throws a ReferenceError?

我已经使用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 -即使该变量仍为“未定义”。

有谁知道引擎盖下发生了什么,或者围绕着什么硬性规定和快速规定? 有谁知道为什么不将这些视为referenceErrors?

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

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

另一方面,当你做

var foo;

foo 确实存在,并且已经声明,它的值只是undefined ,因此您仍然可以引用它而不会引发错误。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM