gpt4 book ai didi

javascript - 未引发 RangeError - JavaScript

转载 作者:行者123 更新时间:2023-11-28 14:29:01 25 4
gpt4 key购买 nike

当运行以下代码时:

(function recur() {
recur()
})()

出现以下错误 -

Uncaught RangeError: Maximum call stack size exceeded

——堆栈中充满了对函数的引用(recur)。

那么为什么下面的代码会这样:

(function recur() {
try {
recur()
} catch (error) {
recur()
}
})()

即使在 try block 中捕获了错误,也不catch block 中返回错误?或者至少提示函数溢出调用堆栈

当代码运行时,它确实会暂停所有其他非异步代码的执行,但仍然......没有错误?! 这是怎么回事?

<小时/>

编辑:

对于这样的代码,这种行为尤其奇怪:

(function notRecur() {
try {
Symbol() + 2
} catch (error) {
Symbol() + 2
}
})()

执行时返回TypeError

这又是一个需要尝试的问题,感谢您的阅读和回复。

最佳答案

如果你有无限的递归,调用堆栈会被填满,直到达到内存限制并崩溃,在这种情况下,错误会冒泡并展开堆栈:

 call > call > call > call > call > | memory limit
<----------------------------- error

现在您可以直接捕获并重试:

 call > call > call > call > call  | memory limit
< error |
> call |
< error |
> call |
< error |
> call |
...

虽然看起来很奇怪,但它并没有填满内存。但是它会阻塞浏览器线程,因此浏览器可能会在一段时间后杀死整个线程。

关于javascript - 未引发 RangeError - JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52155774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com