在Java的for循环中,在声明方面,let和const内部是否没有区别?

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

我最近遇到此代码:

for (const temp of [1,2]) {
  // do something
}

我认为最好将let声明用于temp,因为这样一来,变量将仅声明一次。但是,我也通过babel运行了该示例以及带有let的版本,这就是我看到的内容:

for (const p of [1,2]) {

}

for (let s of [1,2]) {

}

成为:

for (var _i = 0, _arr = [1, 2]; _i < _arr.length; _i++) {
  var p = _arr[_i];
}

for (var _i2 = 0, _arr2 = [1, 2]; _i2 < _arr2.length; _i2++) {
  var s = _arr2[_i2];
}

因此babel将constlet等同对待。我想知道Javascript运行时是否在后台相同地对待两个版本。这样的结论是,即使在循环内用let声明了变量,每次迭代仍会重新声明它?

javascript loops const let for-of-loop
1个回答
4
投票

我认为最好将let声明用于temp,因为这样只能将变量声明一次。

无论哪种方式,每次循环迭代都声明一个新版本;这对于解决闭环问题很重要:

const array = [1, 2, 3, 4];
for (const entry of array) {
    setTimeout(() => {
        console.log(entry);
    }, 0);
}

如果没有为每次循环迭代创建一个新变量,则它将记录相同的值(大约为4)四次。

选择letconst到:

  1. 您是否希望能够在循环中为其分配新值?

  2. 您的个人风格偏好(或您团队的偏好)。

我想知道Javascript运行时是否在后台相同地对待这两个版本。

是,除此之外,您还可以根据需要在循环中为let变量分配一个新值。¹例如:

const strings = ["a", "b", "c"];
for (let str of strings) {
    str = str.toUpperCase();
    console.log(str);
}

例如,唯一的区别是变量是否可变。


¹为避免疑问:分配给它的所有操作都是更改该变量的值。值的来源对数组/迭代器没有影响。

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