2012-01-12 11 views
2

次の関数は、スタックの転覆を最終的に引き起こしますか?再帰関数のsetTimeOut関数はスタックオーバーフローを引き起こしますか?

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

問題が発生していますか?私はメモリの問題があった場所で似ている別のユーザーの質問を見て覚えています。 '$ .ajax'に関連しているようです。 –

答えて

4

そうしてはいけません。 setTimeoutは非同期です(おそらくあなたのAJAXリクエストと同様です)。fooはすぐに終了できます。

jQueryのメモリリークが$.ajaxである場合、それは別の問題です。

+1

お返事ありがとうございます – c830

0

私の経験から、このタイプの機能に問題はありませんでした。私はサーバーとアプリケーションでこのコードを使用するのが快適だと思います。

2

foo()からもう一度setTimeout()を呼び出しても問題はありません。最初の呼び出しfoo()は、2番目の呼び出しがsetTimeout()で始まる前に実際に実行を終了したため、実際には再帰しません。

したがって、スタックの蓄積はまったくありません。

関連する問題