当我尝试运行此程序时,我在Firefox中收到错误说:
第41行moveDate未定义
(参考第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();
}
答案 0 :(得分:6)
是的,他们是。但是,window.setTimeout("moveDate()",100);
将评估全局范围内的代码字符串 - 在那里找不到moveDate
。相反,将函数引用传递给setTimout()
:
window.setTimeout(moveDate, 100);
答案 1 :(得分:2)
“moveDate”的作用域是monthScroller方法。 monthScroller函数括号外的任何内容都无法看到“moveDate”函数。所以......当setTimeout运行时,范围“窗口”和窗口在范围内没有名为“moveDate”的函数。您需要做的是将呼叫更改为以下内容:
setTimeout(moveDate,100);
这对你有用。这样你就可以将moveDate函数/对象传递给setTimeout。