Javascript for循环产生意外结果

时间:2016-03-27 14:42:13

标签: javascript for-loop

我写了以下循环:

for (i = 10; i--; i > 5) {
  console.log(i);
}

将其输出到控制台:

9
8
7
6
5
4
3
2
1
0

有谁能告诉我为什么要这样做?

我看了一下,似乎只是一个简单的问题,我必须使用for循环的第三个参数,而不是第二个参数,但我很着迷记录到控制台的数字。任何人都可以给我一个简单的解释,为什么它输出它所做的数字?

3 个答案:

答案 0 :(得分:4)

for loop具有以下结构:

for (initial condition ; termination condition ; incremental condition)

for loop中,终止和增量条件被交换(!):

for (i = 10; i--; i > 5)

那是:

initial condition: i = 10
termination condition: i-- !!!
incremental condition: i > 5 ??? Does not do incremental

然后,只要终止条件返回true(即i > 0时),循环就会继续。

由于i的初始值为10,因此0执行i--次后10只会变为9 8 7 6 5 4 3 2 1 0 ,因此返回的结果为:

$("#element").on({
mouseenter: function () {
    $("#box").fadeIn();
},
mouseleave: function () {
    var $target = $("#box");


    var timer = setTimeout(function () {
        $target.stop(true, true).fadeOut();
    }, 200);
    $target.data('hoverTimer', timer);
}
});

总计10个循环。

答案 1 :(得分:1)

循环未按预期完成,因为Boolean(i--)仅在i == 0时为假;简而言之,你错位了比较和循环中的动作

答案 2 :(得分:-1)

问题现在已经更正,所以请忽略:首先,你错了 - 它不会产生你指示的输出:)。相反,它会产生以下结果:

for (i = 11; i--; i > 5) {console.log(i);}
// 10 9 8 7 6 5 4 3 2 1 0

从10开始,而不是9:)。

其次,不允许更改for块中语句的顺序。相反,您必须如下所示指定它们:

for (i = 11; i > 5; i--) { console.log(i); }
// 11 10 9 8 7 6

第三(也是最重要的):

  1. 您在i中添加了一个起始值;无论你想要什么或需要什么价值。
  2. 然后创建检查是否继续循环的条件。
  3. 第三个语句通常用于递增或递减i