无法在 Javascript 中进行递归调用

Unable to make recursive call in Javascript

本文关键字:递归 调用 Javascript      更新时间:2023-09-26

当我尝试运行这个程序时,我在Firefox中收到一个错误,说:

移动日期在第 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();
}

是的,他们是。然而,window.setTimeout("moveDate()",100);将在全局范围内评估该代码字符串 - 在那里找不到moveDate。相反,将函数引用传递给 setTimout()

 window.setTimeout(moveDate, 100);

"moveDate" 的作用域在 monthScroller 方法内。monthScroller 函数括号之外的任何内容都看不到"moveDate"函数。所以。。。当 setTimeout 运行时,范围"窗口"和窗口在作用域中没有名为"moveDate"的函数。您需要做的是将调用更改为以下内容:

setTimeout(moveDate,100);

这应该对你有用。这样你就将 moveDate 函数/对象传递到 setTimeout 中。