我是 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/