当我运行以下代码时,它只记录一个循环;但是,当我删除内部循环时,它会按预期运行所有5次。我在俯视什么?
for (var i = 0; i < 5; i++) {
var fieldset = document.getElementsByTagName("fieldset")[i];
console.log("fieldset", i);
var params = [];
for (var i = 0; i < 5; i++) {
params.push(fieldset.getElementsByTagName("input")[i].value);
}
console.log(params);
}
答案 0 :(得分:5)
您在两个循环中都使用相同的变量i
。
包括并扩展作为对此答案的评论而发布的信息:
使用相同的变量只是一个问题,因为您使用了关键字var
。如果您使用关键字let
而不是var
,就不会有问题。
这是因为var
是函数作用域,而let
是块作用域。
答案 1 :(得分:2)
除了@DerpKat答案外,您还可以使用let
代替var
,因此变量名i
的作用域是循环块,而通用名不会碰撞
答案 2 :(得分:0)
您可以通过为循环使用不同的变量来提前获取元素。
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);
}
答案 3 :(得分:0)
正如DerpKat的答案中已经提到的,您正在将相同的变量int main()
{
// Initialize COM.
HRESULT hr = CoInitialize(NULL);
// Create the interface pointer.
ICalculatorPtr pICalc(__uuidof(ManagedClass));
long lResult = 0;
long firstNum = 1;
long secondNum = 2;
// Call the Add method.
pICalc->Add(firstNum, secondNum,lResult);
// Uninitialize COM.
CoUninitialize();
return 0;
}
与var关键字一起使用。您可以在任一循环中更改变量名称,也可以使用i
,该变量具有内部循环中变量let
的块作用域
i
for (var i = 0; i < 5; i++) {
var fieldset = document.getElementsByTagName("fieldset")[i];
var params = [];
for (let i = 0; i < 5; i++) {
params.push(fieldset.getElementsByTagName("input")[i].value);
}
console.log(params);
}