浏览器什么时候停止在javascript中执行递归函数?

时间:2012-10-31 10:03:54

标签: javascript

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

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

浏览器有限次数打印“第一个”。这是为什么?是否有任何特定的机制在一定时间后停止“先打印”?是浏览器特定的吗?

3 个答案:

答案 0 :(得分:4)

递归函数不是无限的 - 它们只能在它们用完堆栈空间之前继续运行。

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

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

如果您使用的浏览器具有开发人员工具窗口(即几乎所有主流浏览器),您应该能够看到控制台窗口中出现的错误。

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

答案 1 :(得分:0)

检查此问题JavaScript Infinite Loop? 并使用答案中的代码来实现循环:

window.onload = function start() {
slide();
}
function slide() {
var num = 0, style = document.getElementById('container').style;
window.setInterval(function () {
    // increase by num 1, reset to 0 at 4
    num = (num + 1) % 4;

    // -600 * 1 = -600, -600 * 2 = -1200, etc 
    style.marginLeft = (-600 * num) + "px"; 
}, 3000); // repeat forever, polling every 3 seconds
}

答案 2 :(得分:0)

递归函数在所有语言中的工作方式都相似。你必须编写return语句,如果condition为true,则返回一些东西,否则再次调用该函数。这一切都取决于要求,你想如何使用它。这可能是算法。

function func_name(){
   if ( condition is true )
      return something
   ...
   ...
   ...
   func_name()
}