递归函数中的setTimeOut函数会导致堆栈溢出吗?

时间:2012-01-12 02:24:42

标签: jquery

以下函数最终会导致堆栈被推翻吗?

var isFinish= false;  
function foo(){         
// ajax call       
//in ajax success   
success: function(response){
setTimeout(function(){ 
     if (!isFinish)
     {            
       foo();   
     }    
     },1000);    
    }   
 }   

3 个答案:

答案 0 :(得分:4)

不应该。 setTimeout是异步的(可能与您的AJAX请求一样),因此foo能够立即退出。

如果jQuery的$.ajax内存泄漏,那就是另一个问题。

答案 1 :(得分:2)

foo()再次致电setTimeout()没有问题。这实际上并不是递归,因为foo()的第一次调用实际上已经在setTimeout()上开始第二次调用之前完成了。

因此,堆栈根本没有堆积。

答案 2 :(得分:0)

根据我的经验,我对此类功能没有任何疑问。我觉得在我的服务器和应用程序上使用这段代码会很舒服。