setInterval仅在if(){}块内部工作

时间:2013-06-11 16:30:07

标签: javascript if-statement scope setinterval

所以我认为从我遇到的这种情况中可以找到一些关键因素,并希望有一些经验可以解释它。

当我运行此代码时,它不起作用:

t5 = "nikolas"+t4;

setInterval(adds,250);

function adds(){
    if (t4 < 100){
        t4=t4+1;
    }    
    else{
        return;
    }
};

这确实有效:

t5 = "nikolas"+t4;

adds(t4);

function adds(a){

    if (a < 100){
        a=a+1;
        setInterval(t4=a,250);
    }

    else{
        return;
    }
};

TL; DR:setInterval似乎在if块内部工作但不在外部。当它工作时,它显示nikolast4,其中t4是一个从1-100'滴答'的整数(例如,强文本 nikolas0 nikolas1 nikolas2 nikolas3 nikolas4)

此代码(由于我正在编程的应用程序)应该每隔250毫秒刷新一次(但是需​​要整个刷新部分,并不是完全100%确定)。

1 个答案:

答案 0 :(得分:1)

下面的代码完全是函数式的,看起来非常像你的非工作示例。

你可以在这里查看: http://jsbin.com/ofezip/1/edit

所以我猜你的变量范围有问题。

window.onload = function()  {

   var myOutput = document.createElement("output"); 
   document.body.appendChild(myOutput);

   var t4 = 0;

   var helloInterval = setInterval(adds,250);

   function adds(){
          if (t4 < 10){
              t4++;
              myOutput.value = "hello " + t4;
          }    
          else {
              myOutput.value = "goodbye" ;
              clearInterval(helloInterval);      
              return;
        }
   }

};