下面是我的代码:

    var showNo = 1;     
    window.setInterval(function() {
          console.log(showNo);
          if(showNo === 1) { var nextNo = 2;  }
          else if(showNo === 2) { var nextNo = 3;  }
          else if(showNo === 3) { var nextNo = 4;  }
          else if(showNo === 4) { var nextNo = 5;  }
          else if(showNo === 5) { var nextNo = 1;  }
          else { var showNo = 1; var nextNo = 2; }

          var showNo = nextNo;
          }, 500);

我的问题是,为什么是showNo变量未持有时的setInterval循环开始?该控制台显示“未定义”在上面的例子。这可能是一个简单的问题,但我想教自己的查询,这有我卡住了..

任何答案将是巨大的。

感谢。

有帮助吗?

解决方案

您正在重新创建称为showNo新的本地变量,这不是引用称为showNo全局变量。

这是非常不好的做法,使用全局变量,我建议这个包裹的匿名函数内

我觉得这是你在找什么做的:

  (function() {
      var showNo = 1;     
      window.setInterval(function() {
            console.log(showNo);

            if( showNo >== 1 && showNo <== 4 ) {  
                showNo++;
            } else if( showNo === 5 ) {
                showNo = 1;  
            } else { 
                showNo = 2; 
            }

            }, 500);
    })();

其他提示

什么@Jacob说的是真的,但你可能想看看简化你的代码有点像这样:

var showNo = 1;     
window.setInterval(function() {
      console.log(showNo);
      showNo++;
      if(showNo > 4)
          showNo = 1;
      }, 500);

我建议您阅读的Javascript瓶盖,那么你会有关于标识符如何在JavaScript解析有深刻的理解。

在广阔的世界的JavaScript,var声明是函数作用域确定,不会阻塞作用域。他们还提升到了一个函数的顶部。所以,你不妨采写:

var showNo = 1;     
    window.setInterval(function() {
          var showNo; // I'm localizing it
          var showNo; // and again
          var nextNo; // Now I'm declaring a new variable
          var nextNo; // and I just can't stop
          var nextNo; // myself from declaring it again
          var nextNo; // its like beating
          var nextNo; // a
          var nextNo; // dead horse.
          console.log(showNo);
          if(showNo === 1) { nextNo = 2;  }
          else if(showNo === 2) { nextNo = 3;  }
          else if(showNo === 3) { nextNo = 4;  }
          else if(showNo === 4) { nextNo = 5;  }
          else if(showNo === 5) {  nextNo = 1;  }
          else { showNo = 1; nextNo = 2; }

          showNo = nextNo;
          }, 500);

您可以大概知道是什么问题。

其他人对这个重构的建议是重要的。但理解在JavaScript确定范围,并且这些烦恼就会消失。

这将持有的值。

function hello(){
    var count = 0;
    var timer = setInterval( function(){  count+=1;alert(count); },2000);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top