我試圖從setInterval的回調中調用的setTimeout內解決變量超出範圍:如何setTimeout調用
function callback()
{
//assign myVar
var myVar = document.getElementById("givenID");
//...
//now wait 2 secs then call some code that uses myVAr
setTimeout("myVar.innerHTML = 'TEST'", 2000);
}
setInterval("callback();", 10000);
的setInterval將按預期,但setTimeout調用失敗。我猜這個問題與我引用一個不在範圍內的變量(myVar)有關。
解決此問題的最佳方法是什麼?
使用像我下面指出的閉包可以解決這個問題,內部閉包可以訪問外部閉包範圍。 – FlySwat 2008-10-26 02:37:52
我必須錯過一些東西 - 你是否試圖通過預先計算myVar來節省一些性能?爲什麼不是 setTimeout(「document.getElementById(」givenID「)。innerHTML ='TEST'」,2000); ? – 2008-10-26 02:46:55
不要在setTimout/setInterval中使用引號,它會強制JS運行時調用Eval,Eval會在新的上下文中運行代碼,因此是範圍問題。 – FlySwat 2008-10-26 02:48:16