javascript - 浏览器何时停止在 javascript 中执行递归函数?

标签 javascript

我是 JavaScript 的初学者。我在 javascript 中尝试递归函数。

<html>
<head>
</head>
<body>
<script type = "text/javascript">
function first(){
    document.write(" first");
    first();
}
first();
</script>
</body>
</html>

浏览器打印“first”有限次。这是为什么?有没有特定的机制在一定时间后停止“首先”打印?它是特定于浏览器的吗?

最佳答案

递归函数不是无限的——它们只能继续运行,直到用完堆栈空间。

在此上下文中,“堆栈空间”是程序(即浏览器)分配用于记住函数调用链的内存,以便当您的函数返回时它知道返回到哪里。

该内存空间是有限的,当它用完时,程序将停止并抛出错误(Stack Overflow 错误)。

如果您使用的浏览器有开发者工具窗口(即几乎所有主流浏览器),您应该能够在错误发生时看到控制台窗口中显示的错误。

浏览器运行循环的确切次数将根据浏览器及其分配给堆栈的内存量而有所不同。这不是您可以直接控制的东西——当然不是在浏览器上下文中;在 C/C++ 程序等较低级别的编程中,您可以使用自己定义堆栈大小的工具,但在浏览器中,这些事情是您无法控制的。也就是说,浏览器应该为堆栈分配足够的内存,除非程序进入无限循环,否则它永远不会碰到它。

关于javascript - 浏览器何时停止在 javascript 中执行递归函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13155434/

相关文章:

javascript - 为什么计数器变量没有递减?

javascript - 如何在设置最大高度时使图像在水平方向上响应

javascript - Thunderbird Webextensions .messages.getFull() 引发异常 0x80004005 (NS_ERROR_FAILURE)

javascript - 在 Protractor 中返回 bool 值而不是成功失败

javascript - 将具有特定类的 li 元素移动到和 div 中

javascript - 如何在 Windows 应用商店应用中加载 CDN JS 文件?

javascript - Node.JS 回调 post 请求关闭

javascript - 如何使用JS按范围从字符串中删除字符串

javascript - Backbone.js 中的内存管理

javascript - 将对象插入对象数组 - Typescript