网站的 JavaScript 中未经处理的异常会发生什么情况?



我最近发生了一个例外,直到我查看Chrome Dev Tools Console。

网站的JavaScript是否只是在某个地方更高级别处理和记录异常?我没有在下面的函数1中处理异常,因此以后的功能只是没有运行或其他内容。

发生异常时会发生什么?我习惯了一个未经治疗的例外,这意味着该程序只是停止

containingFunction
{
   function1();
   function2()
   function3()
   return;
}

tldr

如果未捕获异常并允许冒泡到全球范围,则JavaScript引擎将简单地停止处理任何内容。

所以不简单:

后来的功能只是没有运行或其他功能

这是下面的任何代码,将不会运行。无论它们是否是功能,if语句,循环等

但是..事件不断发生??

好..这取决于

要更具体,浏览器会停止脚本的当前执行(1(并输入事件循环。这意味着任何以前设法在将来安排事件之前的代码在例外情况下都将使未来的回调执行。

例如,以下代码:

<html>
<head>
  <script>
    setTimeout(() => console.log("ha"),1000);
    throw new Error("oops");
    console.log("ho");
  </script>
</head>
<body>
</body>
</html>

,或者如果您更习惯于基于承诺的代码:

<html>
<head>
  <script>
    Promise.resolve().then(()=>console.log("ha"));
    throw new Error("oops");
    console.log("ho");
  </script>
</head>
<body>
</body>
</html>

既会丢弃错误,又会打印" ha",但不是打印" ho"。

,但这取决于解释器。以上是浏览器,但不为node.js。节点只需在任何未知的错误上退出该过程。

例如代码:

setTimeout(() => console.log("ha"),1000);
throw new Error("oops");
console.log("ho");

,或者如果您更习惯于基于承诺的代码:

Promise.resolve().then(()=>console.log("ha"));
throw new Error("oops");
console.log("ho");

Will 使用节点执行时打印" ha"或ho。

(1( - 由"脚本",是指您写下自己作为Web开发人员的脚本。当然,我并不是说浏览器开发人员编写的任何代码。

构造页面时,可以将JavaScript放置在标题标签或页面(or anywhere in between for that matter)的底部。一些浏览器仅在加载HTML和CSS之后执行JavaScript,而有些则在加载JavaScript后运行。

许多人的HTML布局看起来像这样:

<html>
<header>
    <title></title>
    <!--Styles-->
    <!--End Styles-->
</header>
<body>
    <!--All content-->
    <!--End All content-->
    <!--Scripts-->
    <!--End Scripts-->
</body>

原因是JavaScript不会延迟页面加载速度,如果它破裂,则大多数页面已经加载/渲染。当JavaScript在没有try { } catch(err) { }的情况下断开时,其余的不会执行,但不会在页面上丢弃错误,因此为什么在开发人员工具中存在控制台(大多数浏览器具有此功能(

在w3schools.com上阅读更多信息

JavaScript尝试捕获:

try {
    //Do your work here
} catch(err) {
    console.log(err.message);
}

相关内容

最新更新