就声明而言,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
变量的范围和生命周期是相同的,这通常被认为是一个特性。不要担心“重新声明”会影响性能;这是维护运行时的人的事情(他们非常擅长)。