2017-03-17 82 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 /問題/ 6081560/IS-有有史以來-A-好理由對傳遞一個字符串到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/ –