以下函数最终会导致堆栈被推翻吗?
var isFinish= false;
function foo(){
// ajax call
//in ajax success
success: function(response){
setTimeout(function(){
if (!isFinish)
{
foo();
}
},1000);
}
}
答案 0 :(得分:4)
不应该。 setTimeout
是异步的(可能与您的AJAX请求一样),因此foo
能够立即退出。
如果jQuery的$.ajax
内存泄漏,那就是另一个问题。
答案 1 :(得分:2)
从foo()
再次致电setTimeout()
没有问题。这实际上并不是递归,因为foo()
的第一次调用实际上已经在setTimeout()
上开始第二次调用之前完成了。
因此,堆栈根本没有堆积。
答案 2 :(得分:0)
根据我的经验,我对此类功能没有任何疑问。我觉得在我的服务器和应用程序上使用这段代码会很舒服。