function startAJAXcalls()
{
setTimeout(function(){
getXMLData();
startAJAXcalls();
},
10000
);
}
startAJAXcalls();
我从Head First JQuery书中提取了这段代码。它说这将保证不存在请求的累积,我同意这是真的,但我担心不允许退出的大量函数调用。由于通过setTimeout()异步调用startAJAXcalls(),是否每次调用startAJAXcalls()都在自己的堆栈中?
答案 0 :(得分:3)
不,因为一旦你调用setTimeout
,该函数将退出,然后对startAJAXcalls
的下一次调用将以新的堆栈帧开始,因为setTimeout
只是将回调函数排入队列Javascript引擎保留的内容列表,直到它们应该被执行。可以想象有一个静态的函数列表,每次调用setTimeout
时,它都会将函数添加到该列表中。稍后在Javascript引擎的某个时刻执行该回调,它只是将另一个回调放入同一个列表中,并且Javacript引擎在时机成熟时保持循环清空并从列表中调用回调。
关于Javascript如何在此处实现计时器的非常好的信息:http://ejohn.org/blog/how-javascript-timers-work/