for(var i=0;i<5;i++){};
console.log(i) // 5
我的理解是控制台中的输出应为0,1,2,3,4
或undefined
。
我怎么变成= 5?
答案 0 :(得分:3)
如您所见,每次增加i
为1,直到i < 5
语句返回false
^^
for(var i=0;i<5;i++){
console.log(i)
};
console.log(i) // 5
&#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<5
,true
,for loop
正在运行。 ,i++
i=1
,比较i<5
,true
,for loop
正在运行。 ,i++
i=2
,比较i<5
,true
,for loop
正在运行。 ,i++
i=3
,比较i<5
,true
,for loop
正在运行。 ,i++
i=4
,比较i<5
,true
,for loop
正在运行。 ,i++
i=5
,比较i<5
,false
,for loop
停止。
答案 4 :(得分:0)
任何var
的范围是功能范围。这就是为什么会发生这种情况的原因。
您必须使用let
,以便它是块范围的。然后,您将看到undefined
作为输出。
大多数编码器用于阻止作用域变量,这是Java中的标准等。这也是大多数编码人员在Javascript中难以理解这些行为的原因之一。
为了理解在这种情况下输出为'5'的原因,您需要了解Javascript解释器在内部执行“提升”。这意味着它在同一函数的开头内部声明函数中的所有var
。在您的情况下,它在for
循环之前声明变量。因此,变量从for循环中看出来。
如果您运行此代码,那么您将看到“正确”的行为:
for(let i=0;i<5;i++){};
console.log(i)
这将打印:
undefined
有关var
和let
的确如何运作的详细说明,请查看此Youtube video。