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