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