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()
”完成执行之前,将执行以下步骤:
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++) {
//...
}