let、const
- 不存在变量提升
- 暂时性死区(typeof不是百分百安全) 也是因为暂时性死区。使用
let声明变量时,只要变量在还没有声明完成前使用,就会报错。 - 不允许重复声明
总结:
ES6 规定暂时性死区和let、const语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。这样的错误在 ES5 是很常见的,现在有了这种规定,避免此类错误就很容易了。
总之,暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量
为什么要使用块级作用域?
- 第一种场景,内层变量可能会覆盖外层变量。
- 第二种场景,用来计数的循环变量泄露为全局变量。
var s = 'hello'; for (var i = 0; i < s.length; i++) { console.log(s[i]); } console.log(i); // 5上面代码中,变量
i只用来控制循环,但是循环结束后,它并没有消失,泄露成了全局变量

浙公网安备 33010602011771号