4

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

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

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

4

3 回答 3

4

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

在这种情况下,“堆栈空间”是程序(即浏览器)为记住函数调用链而分配的内存,因此当您的函数返回时,它知道返回到哪里。

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

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

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

于 2012-10-31T10:06:59.943 回答
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
}
于 2012-10-31T10:07:50.820 回答
0

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

function func_name(){
   if ( condition is true )
      return something
   ...
   ...
   ...
   func_name()
}
于 2012-10-31T10:09:04.147 回答