我试图从setInterval回调中调用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)有关.
解决这个问题的最佳方法是什么?
这是闭包的理想选择:
setInterval( function () { var myVar = document.getElementById("givenID"); setTimeout( function() { // myVar is available because the inner closure // gets the outer closures scope myVar.innerHTML = "Junk"; },2000); }, 10000);
你的问题与范围有关,这可以解决这个问题.
我遇到了类似的问题.问题是我试图通过setTimeout()从内部调用一个方法.像这样的东西,这对我不起作用:
function myObject() { this.egoist = function() { setTimeout( 'this.egoist()', 200 ); } } myObject001 = new myObject(); myObject001.egoist();
以下也没有工作:
... setTimeout( egoist, 200 ); ... setTimeout( egoist(), 200 ); ... setTimeout( this.egoist, 200 ); ... setTimeout( this.egoist(), 200 ); ... setTimeout( function() { this.egoist() }, 200 );
解决方案是使用with()语句,如下所示:
function myObject() { this.egoist = function() { with (this) { setTimeout( function() { egoist() }, 200 );} } } myObject001 = new myObject(); myObject001.egoist();
当然,这是一个无休止的循环,但我在这里提出的观点是不同的.
希望这可以帮助 :)