无法在 Javascript 中进行递归调用
Unable to make recursive call in Javascript
当我尝试运行这个程序时,我在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 中。
相关文章:
- 为什么setTimeout适用于无休止的递归调用
- 有没有一种方法可以用步骤递归调用jQuery animate()
- 在Dojo类中递归调用setTimeout时是否存在内存泄漏
- 递归调用异步函数
- 递归调用相同的函数
- 计算一个函数在JS中被递归调用的次数
- 如何在 Javascript 中递归调用存储在变量中的函数
- 如果回调调用封闭函数,它是否被称为递归调用
- 无法从响应的结束事件中对 Http.Request 进行递归调用
- JavaScript中的递归调用不起作用
- KO 计算递归调用
- 删除数组递归调用模式中的项
- 无法在 Javascript 中进行递归调用
- 如何递归调用承诺函数
- Javascript 堆栈和递归调用
- 无法在 javascript 中使用 settimeout 递归调用函数
- 原型函数中的递归调用
- 在 Javascript 中递归调用“父”构造函数
- AngularJS:使用$timeout递归调用函数时的RangeError
- JavaScript 理解递归调用代码清理中的上下文,没有“with”关键字