我将变量'i'定义为等于2,然后说:如果'i'介于0和2之间,让函数'animate'运行。但是,如果我在JSFiddle(option-command-I)中打开控制台,则console.log()继续在0以下减少1!我是否在if语句中使用条件不正确?
var interval = window.setInterval(animate, 500);
var i = 2;
if (0 < i < 2) {
function animate() {
alert('run');
i--;
console.log(i);
}
}
答案 0 :(得分:4)
这里有两个问题。
首先,有:0<i<2
。这将始终评估为true
。
为什么呢?你希望它的意思是“我在0和2之间”(可以写成0<i && i<2
)。但对于JS编译器,它只是<
运算符的两个实例。首先,评估0<i
,得到true
或false
;然后,将结果与<2
进行比较 - 因此我们有true<2
或false<2
。为了回答这个问题,JS必须将true
或false
“强制转换”为整数。它将false
视为0
,将true
视为1
;由于这些都是<2
,因此最终结果始终为true
。
其次,您的if
语句的位置只会被检查一次:
if (0 < i < 2) {
function animate() {
如果您仔细阅读代码,您将看到无法返回到此if
语句上方的行,因为代码的唯一重复部分是重复运行{{1功能。要在每次运行函数时运行,animate
需要位于if
内,而不是相反。
答案 1 :(得分:3)
您需要在满足条件后清除间隔并移动if条件(请注意0 < i < 2
需要拆分为2个与&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;功能
var interval = window.setInterval(animate, 500);
var i = 2;
function animate() {
if (i > 0) {
console.log('run');
i--;
console.log(i);
}
else{
window.clearInterval(interval);
}
}
答案 2 :(得分:1)
为什么不将if语句放入动画函数中?
var i = 2;
function animate () {
if (i> 0 && i<2) {
alert('run');
i--;
console.log(i);
}
}
编辑: 1)你可能想要使用i&gt; 0&amp;&amp; i <2而不是0
2)不确定是否需要在满足条件后清除间隔。如果你能详细说明你的要求会更好。