我试图从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