据我所知,不可能重新声明一个 const 数组。
但是当我在循环内声明
arr
时,似乎每次迭代都重新声明了arr。
我不明白这种情况,for 循环会为我每次更改创建一个新范围吗?
for (let i=0; i<5; i++){
const arr = [];
arr.push(i);
console.log(arr[0]);
}
//console: 0 1 2 3 4
常量不能通过重新分配或重新声明而改变。因为你只是添加到数组中,所以你没有做任何一个。
如果在循环内声明变量,JS 会在每次迭代中为其分配新内存,即使较旧的分配仍会消耗内存。
const arr
仅存在于块范围内,下一次迭代将获得一个新变量。因为每个循环迭代都有自己的执行上下文。
JS运行时处理变量的方式是,循环的每次迭代都会创建一个单独的变量(变量绑定)。因此 for 循环的 5 次迭代创建了 5 个单独的变量(每次迭代单独一个)。
有关如何根据关键字和所使用的循环机制类型处理变量声明的确切细节,请检查此。 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...of#description