为什么变量大于循环内的所有可能值?

时间:2017-10-06 14:31:15

标签: javascript

for(var i=0;i<5;i++){};
console.log(i) // 5

我的理解是控制台中的输出应为0,1,2,3,4undefined。 我怎么变成= 5?

5 个答案:

答案 0 :(得分:3)

如您所见,每次增加i为1,直到i < 5语句返回false ^^

&#13;
&#13;
for(var i=0;i<5;i++){
console.log(i) 
};
console.log(i) // 5
&#13;
&#13;
&#13;

更好地解释一下:

((0 + 1)&lt; 5)== true //在括号内执行代码

((1 + 1)&lt; 5)== true //在括号内执行代码

((2 + 1)&lt; 5)== true //在括号内执行代码

((3 + 1)&lt; 5)== true //在括号内执行代码

((4 + 1)&lt; 5)== false //退出

答案 1 :(得分:2)

您正在for循环外打印变量,因此,当您创建变量时,它等于0,然后,它会迭代for,其值为0,1,2,3,4,5。到5,迭代条件为假,因此它打破了循环,并打印i的值,即5。

如果要打印0到4,则需要以下代码:

for(var i = 0 ; i < 5 ; i++){
      console.log(i);
}

答案 2 :(得分:2)

Sixth    5  false 5  //Does not run loop nor increment, i value stays at 5
Fifth    4  true  5  //Does run loop and increment
Fourth   3  true  4  //Does run loop and increment
Third    2  true  3  //Does run loop and increment
Second   1  true  2  //Does run loop and increment
First    0  true  1  //Does run loop and increment
         |   |    |
         |   |    |
         |   |    |
for(var i=0;i<5;i++){};

答案 3 :(得分:1)

i=0,比较i<5truefor loop正在运行。 ,i++

i=1,比较i<5truefor loop正在运行。 ,i++

i=2,比较i<5truefor loop正在运行。 ,i++

i=3,比较i<5truefor loop正在运行。 ,i++

i=4,比较i<5truefor loop正在运行。 ,i++

i=5,比较i<5falsefor loop停止。

答案 4 :(得分:0)

任何var的范围是功能范围。这就是为什么会发生这种情况的原因。

您必须使用let,以便它是块范围的。然后,您将看到undefined作为输出。

大多数编码器用于阻止作用域变量,这是Java中的标准等。这也是大多数编码人员在Javascript中难以理解这些行为的原因之一。

为了理解在这种情况下输出为'5'的原因,您需要了解Javascript解释器在内部执行“提升”。这意味着它在同一函数的开头内部声明函数中的所有var。在您的情况下,它在for循环之前声明变量。因此,变量从for循环中看出来。

如果您运行此代码,那么您将看到“正确”的行为:

for(let i=0;i<5;i++){};
console.log(i)

这将打印:

undefined

有关varlet的确如何运作的详细说明,请查看此Youtube video