为什么这个javascript for循环只运行一次?

为什么这个javascript for循环只运行一次?,javascript,for-loop,var,Javascript,For Loop,Var,而不是: 0 1 2 3 4 5 这是一张我正在阅读的关于JS的幻灯片,它谈论的是当您不使用var时,它是在全局对象上定义的,并且提供了这个示例,没有任何进一步的细节说明为什么我们会得到结果 我认为它将简单地循环并每次运行f1函数,直到小于5 请帮我理解 谢谢问题在于迭代器(i): 或者,使用不同的变量: function f1() { for (var i = 0; i <= 5; i++) console.log(i); } function foo() {

而不是:

0
1
2
3
4
5
这是一张我正在阅读的关于JS的幻灯片,它谈论的是当您不使用var时,它是在全局对象上定义的,并且提供了这个示例,没有任何进一步的细节说明为什么我们会得到结果

我认为它将简单地循环并每次运行f1函数,直到小于5

请帮我理解


谢谢

问题在于迭代器(
i
):

或者,使用不同的变量:

function f1() {
    for (var i = 0; i <= 5; i++)
        console.log(i);
}
function foo() {
    for (var i = 0; i < 5; i++)
        f1();
}
foo();
函数f1(){

对于(i=0;i,如果将循环写成

function f1() {
    for (i = 0; i <= 5; i++)
        console.log(i);
}
function foo() {
    for (j = 0; j < 5; j++)
        f1();
}
foo();

由于您的代码最初是编写的,
i
是一个共享的全局变量,因此
foo
开始,将is设置为
0
,然后调用f1,将其循环到
6
,当控件返回到
foo
时,它发现
i
6
,因此
i
5
false
,从而结束循环

i
是全局的,在函数之间共享。使用
var
将这两个实例都设置为本地。感谢您的所有回答。我已经用var进行了测试,得到了预期的结果。我想了解它为什么这样做。如果我错了,请纠正我。因此,基本上,由于脚本在f1中遇到了i,因此它会运行以下命令d不必费心在foo中运行i???@Kam:我已经对我的答案添加了一个简短的描述。事实上,正如所写的,
i
是一个共享的全局变量,所以
foo
开始,设置is为
0
,然后调用
f1
,当控件返回到
foo
时,它将循环到
5
我发现
i
5
,因此它结束了循环。@Downvoter:我编辑了一些信息,解释了为什么选项2不是一个好主意。如果可以删除downvote,我将不胜感激。感谢Cerburs,这就是我所寻找的。答案很好,但我不能批准第二个解决方案。使用这样的全局变量将不可避免这就是为什么我说第二个选项是个坏主意,就在那个选项的正下方。实际上,在执行了
f1
之后,它应该是
I==6
,这是对这个问题的准确而直接的回答
for (i = 0; i <= 5; i++)
function f1() {
    for (var i = 0; i <= 5; i++)
        console.log(i);
}
function foo() {
    for (var i = 0; i < 5; i++)
        f1();
}
foo();
function f1() {
    for (i = 0; i <= 5; i++)
        console.log(i);
}
function foo() {
    for (j = 0; j < 5; j++)
        f1();
}
foo();
for (i = 0; i < 5; i++)
function f1() {
   for (var i = 0; i <= 5; i++)
      console.log(i);
}
function foo() {
   for (var i = 0; i < 5; i++)
      f1();
}
foo();