ES6(1)块级作用域绑定

113 阅读1分钟
var变量
存在变量提升
块级声明
用于声明在指定块的作用域之外无法访问的变量
1. let声明,不会被提升,因此一般在代码块顶部
2. 禁止重声明
3. const声明,一旦设定不可以更改,且必须初始化

const和let都是块级标识符,只在当前代码块有效,一旦执行到块外会立即被销毁

const声明不允许修改绑定,但允许修改值,这也意味着const声明对象后,可以修改该对象的属性值

临时死区(TDZ)
js引擎发现变量声明时,遇到var,会将他们提升至作用域顶部,遇到letconst,则会放到TDZ中,访问TDZ中的变量会触发运行时错误,只有执行过变量声明语句之后,变量才会从TDZ中移除,才可以正常访问
全局作用域绑定
使用var作用域全局作用域时,会创建一个新的全局变量作为全局对象(浏览器环境中的对象)的属性,可能会覆盖一个已经存在的全局属性
    var RegExp = 'hello'
    console.log(window.RegExp)  //'hello'

如果在全局作用域中使用let或const,会在全局作用域下创建一个新的绑定,但该绑定不会添加为全局对象的属性

    let RegExp = 'hello'
    console.log(RegExp)  //'hello'
    console.log(window.RegExp === Regexp)  //false