我试图创建一个无限循环,使得变量从0增加到最大30,而min 3在每个增量之间花费一秒钟。但不是这样,它根本不会增加,而是反复开始记录检查,变量x和随机变量永远不会被重新定义。
var random = Math.floor(Math.random() * 27) + 3;
var x = 0;
setInterval(count, 1000)
function count() {
if (x < random) {
x++document.getElementById("secs").innerHTML = x + "s ago";
console.log(x);
console.log(random);
} else {
var random = Math.floor(Math.random() * 27) + 3;
var x = 0;
console.log("check")
}
};
答案 0 :(得分:0)
在console.log(x);
之前添加日志语句if-statement
只是为了查看x
的值是什么......值是否会发生变化?您需要在此处更改x
的值 - 例如x +=1;
您需要更改count方法以某种方式增加X的值 - 请参阅下面的示例:
function count() {
if (x < random) {
document.getElementById("secs").innerHTML = x + "s ago";
//here you increment X
x += 1;
console.log(x);
console.log(random);
} else {
//here you are setting new values (no need for var - otherwise you create new, local variables
random = Math.floor(Math.random() * 27) + 3;
x = 0;
console.log("check");
}
};
我希望这会有所帮助。
答案 1 :(得分:0)
您的代码应该是......
var writeStream = gfs.createWriteStream({
filename: f.location,
mode: 'w',
content_type: 'image/jpeg'
});
请记住,最好将setInterval分配给变量,以便清除它......
var random = Math.floor(Math.random() * 27) + 3;
var x = 0;
setInterval(function() { x++; count(x,random) }, 1000)
function count(x ,random) {
if (x < random) {
document.getElementById("secs").innerHTML = x + "s ago";
console.log(x);
console.log(random);
} else {
var random = Math.floor(Math.random() * 27) + 3;
var x = 0;
console.log("check")
}
};
答案 2 :(得分:0)
您创建了两个全局变量来保存x和random的值,但是您还在count函数中创建了两个局部变量。在javascript中有一个称为变量提升的东西,这意味着所有变量声明都被移动到范围函数的顶部。在你的情况下,这是你的计数函数在javascript运行时的样子:
function count() {
var random, x;
// At this point random and x are both undefined, so x < random will always be false
if (x < random) {
x++document.getElementById("secs").innerHTML = x + "s ago";
console.log(x);
console.log(random);
} else {
random = Math.floor(Math.random() * 27) + 3;
x = 0;
console.log("check")
}
};
要解决您的问题,您需要摆脱计数功能中的var
关键字
var random = Math.floor(Math.random() * 27) + 3;
var x = 0;
setInterval(count, 1000)
function count() {
if (x < random) {
x++;
document.getElementById("secs").innerHTML = x + "s ago";
console.log(x);
console.log(random);
} else {
random = Math.floor(Math.random() * 27) + 3;
x = 0;
console.log("check")
}
};
答案 3 :(得分:0)
您的代码有几个问题。一个是你在函数内部声明了变量,你已经在函数之外声明了变量(在else
的{{1}}部分内),另一个是你调用if-else
之后的变量方法你无法阻止它每秒钟被召唤到永恒。
您的目标是增加window.setInterval()
的值,直到达到x
的值,然后重新开始。 random
方法更适合您的目的。请考虑以下内容......
window.setTimeout()
如果出于某种原因,您希望停止对/* generate variable values */
var random = Math.floor(Math.random() * 27) + 3;
var x = 0;
var timer;
/* report the 'random' value */
console.log('random:',random);
function count() {
if (x < random) {
/* report the 'seconds since' value */
console.log(x+1);
/* increment the value */
++x;
/* call this function in 1000ms */
timer = setTimeout(count, 1000);
} else {
/* re-generate variable values */
random = Math.floor(Math.random() * 27) + 3;
x = 0;
/* report the new 'random' value */
console.log(" check");
console.log('random:',random);
/* call this function in 1000ms */
timer = setTimeout(count, 1000);
}
}
/* begin 1s from now */
timer = setTimeout(count, 1000);
的下一次调用,则可以将count()
变量传递给timer
方法,就像这样。
window.clearTimeout()
另请参阅:WindowTimers @ MDN和this classic StackOverflow answer有关JavaScript变量范围。