1
4

3 回答 3

4

这里有两个问题。

首先,有这个:0<i<2。这将始终评估为true

为什么?你希望它的意思是“我在 0 和 2 之间”(可以写成0<i && i<2)。但是对于 JS 编译器来说,它只是<操作符的两个实例。首先,0<i被评估, 导致要么trueor false; 然后,将该结果与<2- 进行比较,因此我们有true<2false<2。为了回答这个问题,JS 必须将trueorfalse转换为整数。它把falseas0trueas 当作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 回答