【发布时间】:2020-01-25 20:24:28
【问题描述】:
我最近遇到了这段代码:
for (const temp of [1,2]) {
// do something
}
我认为对temp 使用let 声明会更好,因为这样变量只会被声明一次。但是,我也通过 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 对待 const 和 let 是一样的。我想知道 Javascript 运行时是否在引擎盖下同样对待这 2 个版本。这样的结论是即使在循环中使用let 声明了一个变量,它仍然会在每次迭代时重新声明?
【问题讨论】:
-
是的,
let和const变量的作用域和生命周期是相同的,这通常被认为是一个特性。不要担心“重新声明”是性能问题;这是维护运行时的人的事(他们非常擅长)。
标签: javascript loops constants let for-of-loop