错误处理-当JavaScript抛出ReferenceError时,其背后的逻辑是什么
error handling - 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,即使该变量仍然是"未定义的"。
有人知道幕后发生了什么吗?或者围绕这件事的硬性规定是什么?有人知道为什么这些不被视为参考错误吗?
使用存在但具有undefined
值的变量和使用不存在且从未声明的变量是有区别的。
后者将在您试图引用不存在且尚未声明的内容时创建引用错误。
另一方面,当你进行时
var foo;
foo
确实存在,并且它已经被声明,它的值只是undefined
,所以你仍然可以引用它而不会抛出错误。
换句话说,试图引用尚未声明的变量将引发引用错误,而引用已声明的变量永远不会引发引用错误——无论是否为该变量设置了值。
相关文章:
- “var self = this”方法背后的原理是什么?
- React Router 如何处理 onEnter 背后的逻辑是什么?
- 让函数中的接收器默认为全局对象背后的基本原理是什么?
- AJAX 跨域安全背后的基本原理是什么?
- Facebook评论API - Facebook所说的“评论框背后”是什么意思
- Lightstreamer背后的魔力是什么
- d3背后的逻辑是什么.js nice()刻度
- JavaScript:“shift”方法背后的逻辑是什么?
- Math.max方法背后的逻辑是什么
- 与compareFunction一起使用的排序方法背后的逻辑是什么
- 用continuation生成Javascript代码背后的诀窍是什么
- 窗口背后的原因和窗口的顶部属性是什么
- 名称空间背后的概念是什么
- 堆栈溢出背后的算法是什么? ajax标记搜索字段
- 网站上的3D图像非常酷,但这背后的技术是什么?
- 使用Object.assign创建对象背后的思想是什么?
- canPlayType背后的原理是什么?
- javascript中var a = (expression1, expression2)背后的原因是什么?
- 错误处理-当JavaScript抛出ReferenceError时,其背后的逻辑是什么
- 选择一个完整的基于CSS的菜单和基于Javascript/CSS的菜单背后的基本原理是什么?