2017-03-17 14 views
0
function checkDownload(a, b) { 
    var number = a; 
    var id = b; 

    //NOT RELATED CODE.... 
    setTimeout("checkDownload(number,id)", 5000); 
} 
checkDownload("test", "test1"); 

だから、setTimeoutでエラーが発生します(可変数が見つかりません)。なぜですか?私は以前に得た変数で5秒後に関数を更新したいだけです。変数を使用してJS関数をリフレッシュする

よろしく

+1

重複[?*これまでのsetTimeoutする文字列を渡すために良い理由がある*](​​http://stackoverflow.com/questions/6081560/is-there-a-good-reason-to-pass-a-string-to-settimeout)?質問自体は、グローバル変数を使って文字列バージョンを記述しています... –

答えて

9

そう思うには、setTimeoutメソッドでエラーが発生しました(変数番号を見つけることができません)が付属しています....しかし、なぜですか?

setTimeoutの文字列を使用すると、その文字列のコードがグローバルスコープで評価されるためです。 グローバルnumberidの変数がない場合は、エラーが発生します。

setTimeoutsetIntervalで使用関数を文字列を使用しないでください:の

// On any recent browser, you can include the arguments after the timeout and 
// they'll be passed onto the function by the timer mechanism 
setTimeout(checkDownload, 5000, number, id); 

// On old browsers that didn't do that, use a intermediary function 
setTimeout(function() { 
    checkDownload(number, id); 
}, 5000); 
+2

私にそれを打つ。実際のフィドル:https://jsfiddle.net/L286s259/ –

関連する問題