2012-01-12 121 views
2

下面的函数最终会导致堆栈推翻吗?将递归函数中的setTimeOut函数导致堆栈溢出?

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

您是否遇到问题?我记得看到另一个用户的问题在存在内存问题时是相似的。它似乎与'$ .ajax'有关。 – 2012-01-12 02:37:39

回答

4

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

如果jQuery在其$.ajax中有内存泄漏,那么这是另一个问题。

+1

感谢您的回答 – c830 2012-01-12 02:50:36

0

从我的经验,我还没有这种类型的功能的问题。我会很放心在我的服务器和应用程序上使用这些代码。

2

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

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