当我尝试运行这个程序,我得到了Firefox的一个错误,指出:无法进行递归调用Javascript中
在MOVEDATE未定义线41
(指线window.setTimeout("moveDate()",100);
。
为什么?我以为递归函数能够定义自己,然后在他们自己拨打任何想法。
function monthScroller(){
document.getElementById("month").style.visibility = "visible";
var x = 0;
var y = 0;
var dest_x = window.innerWidth/2;
var dest_y = window.innerHeight/2;
var interval = 1;
function moveDate() {
if(x<dest_x){ x = x + interval;}
if(y<dest_y){ y = y + interval;}
document.getElementById("month").style.top = y+"px";
document.getElementById("month").style.left = x+"px";
if ((x+interval < dest_x) && (y+interval < dest_y)) {
window.setTimeout("moveDate()",100);
}
else{
name();
}
}
moveDate();
}
eval()是邪恶的。不要使用这些,包括'setTimeout(“”)'中的那个。 –
德里克,你打败我的eval()是邪恶的线。无论如何,这篇博文解释了更多关于你为什么不想使用字符串来动态评估代码的问题(这是setTimeout在使用字符串时的作用)。 http://blogs.msdn.com/b/ericlippert/archive/2003/11/01/53329.aspx –
这不是真正的递归,moveDate()将在你的setTimeout重新运行之前约100ms完成它的调用如果您按照答复者的建议致电。 –