问一个setTimeout()的问题?

来源:百度知道 编辑:UC知道 时间:2024/05/16 14:09:06
我在学习javascript的时候,碰到了setTimeout()方法。例子如下:
<script language="Javascript">
var id,pause=0,position=0;
function banner()
{
var m1=" 你好,欢迎学习JavaScript!";
var m2=" 这里介绍文字的跑马灯文字特效!";
var msg=m1+m2;
var speed=10;
document.isnform.banner.value=msg.substring(position,position+160);
if(position++==msg.length)
{
position=0;
}
id = setTimeout("banner()",2000/speed);
}
</script>

这里setTimeout("banner()",2000/speed);中不断的调用banner()函数,应该就算递归调用吧。我对递归函数的理解还不是很透彻,不过书上说递归函数应该要有结束语句,不能无限制的调用,不然会造成系统崩溃。那么请问这个setTimeout("banner()",2000/speed);可没有结束语句,用在这里行么?

这个严格的说不是递归调用。给你看个例子:
function test(a,b)
{
x = a+b;
if(x<1000)
{
x=test(x,5);
}
alert('over x=' + x);
}

test(1,2);
这个叫函数的递归调用,函数内部调用本身函数计算数值并返回结果,用这个结果参与计算等。

但是你的属于时间触发,而不是递归调用
时间触发1轮完成 就将本身资源释放了,只有新一轮函数的资源占用

递归不是,是层层向里,直到有个复合条件的终止函数,才能逐级向外返回并释放资源,所以无限递归会吃掉所有系统资源。

function aaa(){
aaa();
}
书上说的递归函数指的是这样的函数.

一般情况像你要实现的这种效果.根本没有必要使用setTimeout和setInterval.

只需要一张简单的gif图片就能搞定的.干嘛非要用JS来吃内存?

setTimeout和setInterval相对应的停止命令是:

clearTimeout和clearInterval.