内环显然卡住了

时间:2019-03-14 16:15:59

标签: javascript loops

当我运行以下代码时,它只记录一个循环;但是,当我删除内部循环时,它会按预期运行所有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);
}

4 个答案:

答案 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);
}