就声明而言,Javascript中for of循环内部的let和const之间没有区别吗?

就声明而言,Javascript中for of循环内部的let和const之间没有区别吗?,javascript,loops,constants,let,for-of-loop,Javascript,Loops,Constants,Let,For Of Loop,我最近遇到了以下代码: 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++) {

我最近遇到了以下代码:

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];
}
for(var _i=0,_arr=[1,2];_i<_arr.length;_i++){
var p=_arr[_i];
}
对于(var _i2=0,_arr2=[1,2];_i2<_arr2.length;_i2++){
var s=_arr2[_i2];
}
因此,巴贝尔将
const
let
等同对待。我想知道Javascript运行时是否会将这两个版本一视同仁。其结论是,即使在循环中使用
let
声明变量,它仍然会在每次迭代中重新声明

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

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

const数组=[1,2,3,4];
for(数组的常量项){
设置超时(()=>{
控制台日志(条目);
}, 0);

}
是的,
let
const
变量的范围和生命周期是相同的,这通常被认为是一个特性。不要担心“重新声明”会影响性能;这是维护运行时的人的事情(他们非常擅长)。