云南java培训学校告诉你JavaScript可能存在的bug?

对于每一个程序员来说,编程过程中出现bug和错误是非常正常的,只要我们在上线之前就把问题消除掉。今天,我们来看看JavaScript中存在的问题。

调用栈的工作机制

在讨论JS中的错误之前,我们必须了解CallStack的工作机制。其实这个机制很简单。如果你清楚这一点,可以直接跳过这一部分。

简单来说就是:当一个函数被调用时,它会被添加到调用栈顶,执行后,它会被从调用栈顶移除。这种数据结构的关键是LIFO,也就是大家熟知的LIFO。比如我们在函数Y内部调用函数X时,从下到上调用栈的顺序是Y->;十.

错误对象和错误处理

当代码中出现错误时,我们通常会抛出一个错误对象。Error对象可以用作扩展和创建自定义错误类型的原型。错误对象的原型具有以下属性:

Constructor_负责这个实例的原型构造函数;

Message_ error消息;

Name_错误的名称;

以上都是标准属性,有些JS运行时环境也提供了标准属性之外的属性,比如Node.js、Firefox、Chrome、Edge、IE10、Opera、Safari6+,都包含了错误代码的调用栈,我们将简称为错误栈。错误堆栈包含发生错误时的完整调用堆栈信息。如果您想了解更多关于Error对象的非标准属性,我强烈建议您阅读MDN的这篇文章。

在抛出错误时,必须使用throw关键字。为了捕获抛出的错误,必须使用trycatch语句包装可能错误的代码块。在捕捉时,您可以接收一个参数,这是抛出的错误。和Java类似,JS在trycatch语句后面也可以有finally,无论前面的代码是否抛出错误,finally中的代码都会被执行。这种语言的常见用法是:在最后做一些清洁工作。

错误堆栈的剪裁

只有Node.js支持这个特性,通过error.capturestacktrace实现,Error.captureStackTrace接收一个对象作为1个参数,一个可选函数作为2个参数。IT training/认为它的作用是捕获当前调用栈并剪切它。被捕获的调用栈会用1个参数记录在stack属性上,切割的参考点是2个参数,也就是这个函数之前的调用会被记录在调用栈上,后续的调用不会。