JS 在 ES6 加入了 const 关键字,除了加入了其它语言一样的常量特性,不仅没有 var 的变量提升,还有块级作用域特性。
常量是不可变的,在 ES6 中指的是常量存储地址的不变性,而不是常量的不可变。所以在 const arr = [];arr.push(1)
是可以运行的。
了解这个之后,我们再看看 for 循环
1 | for (const i = 0; i < 5; i++) { |
那么这个就是错的,如果我们用 C++ 改写,并且输出的是循环量的地址的话,那么就可以看出,for 循环每次循环都是相同的地址。
1 | int main() { |
根据 const 是不可修改原地址值得特性,所以说 const 用在 for 循环中是错误的。不过下面使用 for...of
就是对的。
1 | const list = [1, 2, 3, 4, 5] |
根据上述说明,可以推断出 for...of
每次循环都是产生一个新的地址,并把新的值指向这个地址。那么 for...of
使用 const 有什么作用?
1 | // 例子来源于 MDN |
也就是说如果使用了 const 在此块级作用域下是不可以修改的。
不过在 Go 中是复用相同地址的变量,不能设置 const 的常量的形式,所以就是相同的地址了。
1 | package main |