的JavaScript的setInterval循环不存储变量
-
19-09-2019 - |
题
下面是我的代码:
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);
}
不隶属于 StackOverflow