问问题
469 次
3 回答
4
这里有两个问题。
首先,有这个:0<i<2
。这将始终评估为true
。
为什么?你希望它的意思是“我在 0 和 2 之间”(可以写成0<i && i<2
)。但是对于 JS 编译器来说,它只是<
操作符的两个实例。首先,0<i
被评估, 导致要么true
or false
; 然后,将该结果与<2
- 进行比较,因此我们有true<2
或false<2
。为了回答这个问题,JS 必须将true
orfalse
转换为整数。它把false
as0
和true
as 当作1
; 既然两者都是<2
,最后的结果总是true
。
其次,您的if
声明的位置,只检查一次:
if (0 < i < 2) {
function animate() {
如果您通读代码,您会发现无法回到该if
语句上面的行,因为代码中唯一重复的部分是重复运行animate
函数的间隔。要在每次函数运行时运行,if
需要在 内部function
,而不是相反。
于 2013-09-29T04:04:36.057 回答
3
一旦满足条件,您需要清除间隔,并0 < i < 2
在函数内部进行修改并移动 if 条件(请注意,需要将其拆分为与 && 连接的 2 个条件,但在这里您可以这样做)。
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);
}
}
于 2013-09-29T04:00:31.097 回答
1
为什么不将 if 语句放在 animate 函数中?
var i = 2;
function animate () {
if (i> 0 && i<2) {
alert('run');
i--;
console.log(i);
}
}
编辑:1)您可能想使用 i>0 && i<2 而不是 0
2)不确定是否需要在满足条件后清除间隔。如果您能详细说明您的要求会更好。
于 2013-09-29T04:00:46.260 回答