Javascript:for循环';对于(i=0;i<;3;i+;+;)';过早终止而不使用continue、break或return

Javascript:for循环';对于(i=0;i<;3;i+;+;)';过早终止而不使用continue、break或return,javascript,for-loop,scope,global-variables,nested-loops,Javascript,For Loop,Scope,Global Variables,Nested Loops,考虑以下代码: function A() { for(i = 0; i < 3; i++) { console.log("---" + i + "---"); B(); } } function B() { for(i = 0; i < 3; i++) { console.log(i); } } A(); 收到的输出: ---0--- 0 1 2 ---1--- 0 1 2

考虑以下代码:

function A()
{
    for(i = 0; i < 3; i++)
    {
        console.log("---" + i + "---");
        B();
    }
}

function B()
{    
    for(i = 0; i < 3; i++)
    {
        console.log(i);
    }
}

A();
收到的输出:

---0---
0
1
2
---1---
0
1
2
---2---
0
1
2
---0---
0
1
2
如前所述,我使用了for循环。这是使用Google搜索“javascript for loop”时的第一个结果。我们发现了几十个类似的例子

引自www.w3schools.com:

for(i=0;i”;
}
为什么“
A()
”不能提供预期的输出

注意:

我之所以发布这个问题,是因为我遇到了这个问题,尽管遇到这个问题的几率相对较高,但在网上没有找到任何关于这个问题的信息

在Javascript中,设置了变量但未事先声明 是在全局范围内创建的

这在大多数情况下都很好,但由于当需要计数器变量的名称时,“
i
”通常是首选项,因此这可能会成为一个严重的问题

如果一些for循环是嵌套的,您当然会使用“
j
”、“
k
”、“
l
”、
”作为计数器变量名,以避免干扰其他for循环的迭代,但在for循环中调用函数“
X()
”时,尤其是当您不是“
X()
”的作者时,for循环使用相同的计数器变量名称将相互干扰

这意味着您应该在局部范围内声明任何计数器变量以避免此类问题,如果您不知道要查找的是什么,则很难调试此类问题

现在,让我们看看在问题中调用“
a()
”时会发生什么

在“
B()
”完成执行之前,将执行以下步骤:

  • 输入for循环,并将“
    i
    ”设置为“
    0
  • 由于“
    0<3
    ”为
    true
    ,因此将输入循环体
  • 0
    ”将打印到控制台
  • i
    ”由“
    1
    ”递增,现在保存值“
    1
  • 现在循环重复“
    2.
    4.
    ”,但随着“
    i
    ”值的不断增加:
    1
    ”和“
    2
    ”被打印到控制台
  • 由于“
    3<3
    ”是
    false
    for循环,因此“
    B()
    ”完成执行
  • 现在我们回到“
    A()
    ”,但是“
    i
    ”的值为“
    3
    ”:

    for(变量i=0;i<3;i++){
    //...
    }
    

    vari;
    对于(i=0;i<3;i++){
    //...
    }
    

    解释得很好!请使用局部变量。不要污染全局名称空间。
    for (i = 0; i < cars.length; i++) {
        text += cars[i] + "<br>";
    }
    
    function A()
    {
        for(i = 0; i < 3; i++)
        {
            console.log("---" + i + "---");
            B();
        }
    }
    
    function B()
    {    
        for(i = 0; i < 3; i++)
        {
            console.log(i);
        }
    }
    
    function A()
    {
        for(i = 0; i < 3; i++)
        {
            console.log("---" + i + "---");
            B();
        }
    }
    
    for (i = 0; i < 3; i++) {
        //...
    }
    
    for (var i = 0; i < 3; i++) {
        //...
    }
    
    var i;
    for (i = 0; i < 3; i++) {
        //...
    }