我希望有人可以帮助我。
我有这段代码:
<script>
$(document).ready(function() {
spectrum();
function spectrum(){
$('#bottom-menu ul li.colored a').animate( { color: '#E7294F' }, 16000);
spectrum2();
}
function spectrum2(){
$('#bottom-menu ul li.colored a').animate( { color: '#3D423C' }, 16000);
spectrum();
}
});
</script>
它正在工作,但当我看到萤火虫时,它说有一个太多的递归错误。
我希望有人可以告诉我原因。
谢谢!
答案 0 :(得分:4)
问题是你的脚本永远不会停止执行。
当页面加载时,您告诉它运行函数spectrum()
。它运行此函数,然后被告知运行它所执行的函数spectrum2()
。当它完成spectrum2()
时,你告诉它再次运行spectrum()
,当它完成时它必须再次运行spectrum2()
..看到模式?你的糟糕脚本永远不会一遍又一遍地执行这两个功能!
调用自身的函数(或两个反复调用的函数)的过程称为recursion,但通常递归最终会以某种方式终止。你永远不会终止,所以FireBug说“等一下,这个剧本永远不会结束,我最好抛出一个错误!”
这可能不是你想要实现的,修复很可能很简单。如果您可以尝试解释您想要实现的目标,也许我们可以帮您编写正确的代码?
答案 1 :(得分:0)
你有一个明确无休止的递归。 specturm()调用spectrum2(),后者又调用spectrum();你没有终止条件。您需要添加一个条件来终止该递归。也许你想要实现以下目标。如果您告诉我们您要实现的目标,那么您将获得解决方案。
<script>
$(document).ready(function() {
spectrum();
function spectrum(toEnd){
$('#bottom-menu ul li.colored a').animate( { color: '#E7294F' }, 16000, function(){
if(!toEnd)
spectrum2(true);
});
}
function spectrum2(toEnd){
$('#bottom-menu ul li.colored a').animate( { color: '#3D423C' }, 16000, function(){
if(!toEnd)
spectrum(true);
});
}
});
</script>
答案 2 :(得分:-1)
使用setTimeout从堆栈中删除调用函数:
function spectrum(){
$('#bottom-menu ul li.colored a').animate( { color: '#E7294F' }, 16000);
setTimeout(function() {spectrum2();},100);
}
这样,频谱有机会在你启动频谱2时完成。与spectrum2一样。