Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 内环显然卡住了_Javascript_Loops - Fatal编程技术网

Javascript 内环显然卡住了

Javascript 内环显然卡住了,javascript,loops,Javascript,Loops,当我运行以下代码时,它只记录一个循环;但是,当我移除内部循环时,它会按它应该的方式运行5次。我忽略了什么 for(变量i=0;i

当我运行以下代码时,它只记录一个循环;但是,当我移除内部循环时,它会按它应该的方式运行5次。我忽略了什么

for(变量i=0;i<5;i++){
var fieldset=document.getElementsByTagName(“fieldset”)[i];
console.log(“字段集”,i);
var参数=[];
对于(变量i=0;i<5;i++){
push(fieldset.getElementsByTagName(“输入”)[i].value);
}
控制台日志(params);

}
在两个循环中使用相同的变量
i


要包括并扩展作为对本答案的评论发布的信息:

这只是一个问题,因为您使用了关键字,
var
,所以使用相同的变量。如果您使用了关键字
let
而不是
var
,您就不会有这个问题


这是因为
var
是函数作用域,而
let
是块作用域。

通过为循环使用不同的变量,可以提前获得元素

var fieldsets = document.getElementsByTagName("fieldset"),
    params,
    inputs,
    i, j;

for (i = 0; i < 5; i++) {
    inputs = fieldsets[i].getElementsByTagName("input");
    params = [];
    for (j = 0; j < 5; j++) {
        params.push(inputs[j].value);
    }
    console.log(params);
}
var fieldset=document.getElementsByTagName(“fieldset”),
params,
投入,
i、 j;
对于(i=0;i<5;i++){
输入=字段集[i].getElementsByTagName(“输入”);
参数=[];
对于(j=0;j<5;j++){
参数推送(输入[j].值);
}
控制台日志(params);
}

作为@DerpKat答案的补充,您也可以使用
let
而不是
var
,这样变量名
i
的作用域将限定在循环块上,公共名称将不会冲突,正如DerpKat在答案中已经提到的那样,您使用的变量
i
带有var关键字。您可以在任意一个循环中更改变量名,也可以使用
let
,它对内部循环中的变量
i
具有块作用域

for(变量i=0;i<5;i++){
var fieldset=document.getElementsByTagName(“fieldset”)[i];
var参数=[];
for(设i=0;i<5;i++){
push(fieldset.getElementsByTagName(“输入”)[i].value);
}
控制台日志(params);
}

个性化:
个性化:
个性化:
个性化:
个性化:

您正在内外循环中使用变量i更改内循环中的变量。Javascript是函数作用域,因此在内部循环的末尾,外部循环的退出条件il也会满足。天啊。谢谢这是正确的答案,因为在这两个地方,
i
都是用
var
声明的。OP也可以从
var
更改为
let
,并保留变量