用于后续迭代的循环跳过变量声明

问题描述 投票:0回答:1

为什么“ i”不总是等于零?循环的后续迭代是否跳过var声明?我知道,在第一次迭代结束时,i = 1,但是随后经过时,var声明不重置i = 0吗?

当我使用args运行该函数时,所有方法都可以正常工作,但是我不知道为什么如果有必要,为什么不重设var声明。如果在循环外声明var“ i”,这对我来说很有意义。

function multiply(arr, n) {
    var product = 1;
    for (var i = 0; i < n; i++) {
        product *= arr[i];
    }
    return product;
  }
javascript loops for-loop var
1个回答
0
投票

for循环声明的第一部分(在大多数情况下)在循环的最开始仅运行一次。您的代码等效于:

function multiply(arr, n) {
  var product = 1;
  var i = 0;
  for (; i < n; i++) {
    product *= arr[i];
  }
  return product;
}

相当于:

function multiply(arr, n) {
  var product = 1;
  var i = 0;
  while (true) {
    // for loop body:
    product *= arr[i];

    // for loop declaration part:
    i++;
    if (!(i < n)) break;
  }
  return product;
}

因此,i在开始时只分配了一次0

© www.soinside.com 2019 - 2024. All rights reserved.