let、const

  1. 不存在变量提升
  2. 暂时性死区(typeof不是百分百安全)  也是因为暂时性死区。使用let声明变量时,只要变量在还没有声明完成前使用,就会报错。
  3. 不允许重复声明

总结:

ES6 规定暂时性死区和letconst语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。这样的错误在 ES5 是很常见的,现在有了这种规定,避免此类错误就很容易了。

总之,暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量


为什么要使用块级作用域?

  1. 第一种场景,内层变量可能会覆盖外层变量。
  2. 第二种场景,用来计数的循环变量泄露为全局变量。   
    var s = 'hello';
    
    for (var i = 0; i < s.length; i++) {
      console.log(s[i]);
    }
    
    console.log(i); // 5
    

    上面代码中,变量i只用来控制循环,但是循环结束后,它并没有消失,泄露成了全局变量

https://es6.ruanyifeng.com/#docs/let 

posted @ 2021-12-04 11:35  Evhgjvggg  阅读(59)  评论(0)    收藏  举报