下面的函数最终会导致堆栈推翻吗?将递归函数中的setTimeOut函数导致堆栈溢出?
var isFinish= false;
function foo(){
// ajax call
//in ajax success
success: function(response){
setTimeout(function(){
if (!isFinish)
{
foo();
}
},1000);
}
}
下面的函数最终会导致堆栈推翻吗?将递归函数中的setTimeOut函数导致堆栈溢出?
var isFinish= false;
function foo(){
// ajax call
//in ajax success
success: function(response){
setTimeout(function(){
if (!isFinish)
{
foo();
}
},1000);
}
}
它不应该。 setTimeout
是异步的(可能与您的AJAX请求一样),因此foo
可以立即退出。
如果jQuery在其$.ajax
中有内存泄漏,那么这是另一个问题。
感谢您的回答 – c830 2012-01-12 02:50:36
从我的经验,我还没有这种类型的功能的问题。我会很放心在我的服务器和应用程序上使用这些代码。
从setTimeout()
再次呼叫foo()
没有问题。这实际上不是递归的,因为foo()
的第一次调用实际上在第二次调用在setTimeout()
开始之前已经完成执行。
因此,堆栈根本没有堆积。
您是否遇到问题?我记得看到另一个用户的问题在存在内存问题时是相似的。它似乎与'$ .ajax'有关。 – 2012-01-12 02:37:39