Yos*_*Yos 2 javascript loops const let for-of-loop
我最近遇到了以下代码:
for (const temp of [1,2]) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
我认为最好使用let
声明,temp
因为这样只能将变量声明一次。但是,我还运行了该示例以及let
通过babel编写的版本,这是我看到的内容:
for (const p of [1,2]) {
}
for (let s of [1,2]) {
}
Run Code Online (Sandbox Code Playgroud)
成为:
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];
}
Run Code Online (Sandbox Code Playgroud)
因此,通天对待const
和let
相同。我想知道Javascript运行时是否在后台相同地对待两个版本。这样的结论是,即使let
在循环内部声明了变量,每次迭代仍会重新声明该变量?
我认为最好将let声明用于temp,因为这样只能将变量声明一次。
无论哪种方式,每次循环迭代都声明一个新版本。这对于解决闭环问题很重要:
const array = [1, 2, 3, 4];
for (const entry of array) {
setTimeout(() => {
console.log(entry);
}, 0);
}
Run Code Online (Sandbox Code Playgroud)
如果没有为每次循环迭代创建一个新变量,则它将记录相同的值(可能为4)四次。
选择let
或取决于const
:
您是否希望能够在循环中为其分配新值?
您的个人风格偏好(或团队的偏好)。
我想知道Javascript运行时是否在后台相同地对待两个版本。
是的,let
除此之外,您还可以根据需要在循环中为变量分配一个新值。¹例如:
const strings = ["a", "b", "c"];
for (let str of strings) {
str = str.toUpperCase();
console.log(str);
}
Run Code Online (Sandbox Code Playgroud)
例如,唯一的区别是变量是否可变。
¹ 为避免疑问:分配给它的所有操作都是更改该变量的值。该值对数组/可迭代对象没有影响。
归档时间: |
|
查看次数: |
45 次 |
最近记录: |