For循环在后续迭代中跳过变量声明
For loop skipping variable declaration on subsequent iterations
为什么 "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;
}
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
一次。
我用 限定了上面的大部分内容 因为,当用 let
和 let
声明变量时,行为有点奇怪具有块作用域,而不是函数作用域 - 使用 let
,每次迭代都会为变量名创建一个单独的绑定。 (但在你的情况下这并不值得担心 - 只有当 for
循环异步使用变量时才真正需要考虑的事情)
为什么 "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;
}
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
一次。
我用 限定了上面的大部分内容 因为,当用 let
和 let
声明变量时,行为有点奇怪具有块作用域,而不是函数作用域 - 使用 let
,每次迭代都会为变量名创建一个单独的绑定。 (但在你的情况下这并不值得担心 - 只有当 for
循环异步使用变量时才真正需要考虑的事情)