事情是做一个无限循环迭代某个对象(传递图像,改变背景颜色等)。当我回调函数时:
function helloworld() {
alert("hello, world!");
helloworld();
}
浏览器说已经完成了太多次。所以我不明白幻灯片是怎么做的。如何无限地回调函数,以免它破坏? (当然,我设置了一个setTimeout,否则它太快了)
答案 0 :(得分:5)
如果您只想尽可能快地无限地呼叫helloworld
,请写一个循环:
while(true) {
helloworld();
}
请注意,这将阻止您的程序在外部通知任何其他输入或事件。您将不得不在循环中编写额外的代码来检查外部世界中发生了什么。如果您想以某种受控速率无限拨打helloworld
(并允许您的程序处理其他事件),请使用setInterval
:
var theIntervalHandle = setInterval(helloworld, someDelayValue);
function helloworld() {
// whatever
if(readyToStopCallingHelloWorld) {
clearInterval(theIntervalHandle);
}
}
编辑 :如果您对技术细节感兴趣,请注意它并非真正的递归。递归就是你在原始示例中所做的事情,并且最终会耗尽堆栈空间,就像浏览器告诉你的那样。这些示例只是一遍又一遍地调用helloworld
,而不是递归到它。如果您有兴趣,可能需要read关于递归。