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/

08-16 02:24