【发布时间】:2018-05-17 03:58:34
【问题描述】:
目前正在测试一些在循环调用中移动元素 x 像素数量的东西。我创建了一个递归函数,并添加了一些延迟以避免回调溢出。我已经使用 setTimeout 来创建这个延迟。我想知道为什么在使用 setTimeout 时需要将递归函数包装在另一个函数中。如果我不这样做,则不会添加延迟,并且浏览器会在我的控制台中执行回调已超出错误。下面是我正在使用的代码。它的目的是让“那个东西(一个球)”从左到右,一遍又一遍地在 div/box/screen 上移动。
(我知道 requestAnimationFrame 通常用于这类事情,但我正在尝试通过不同的方法熟悉 javascript)。
function moveThing(pos){
var currentPos = pos;
currentPos += 5;
theThing.style.left = currentPos + "px";
if( Math.abs(currentPos) >= 900) {
currentPos = -500;
}
console.log(currentPos);
setTimeout(function(){moveThing(currentPos)}, 100);
}
moveThing(0);
另外,如果我没有使用正确的术语,请随时更正。提前感谢您的帮助!
【问题讨论】:
-
你还会做什么?
-
因为
setTimeout期望一个可调用函数作为第一个参数,而不是函数call -
@Li357 哦,好吧。够简单!谢谢:D
标签: javascript html css recursion settimeout