当前位置:  开发笔记 > 编程语言 > 正文

如何在setTimeout调用中解决Var超出范围的问题

如何解决《如何在setTimeout调用中解决Var超出范围的问题》经验,为你挑选了2个好方法。

我试图从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)有关.

解决这个问题的最佳方法是什么?



1> FlySwat..:

这是闭包的理想选择:

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和setInterval的一个很好的理由!:-)

2> svinec..:

我遇到了类似的问题.问题是我试图通过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();

当然,这是一个无休止的循环,但我在这里提出的观点是不同的.

希望这可以帮助 :)


发现"有(这个)"是我的一天,谢谢!
推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有