01 let和const
/**
* 1.let不存在变量提升;
* 2.暂时性死区TDZ:只要块级作用域存在let命令,它所申明的变量就绑定这个区域,不再受外部的影响;
* 对于var x=x;与let x=x;问题的本质就是js变量的创建create、初始化initialize、和赋值assign
* var x=x =>var x=undefined;x=x;
* 而 let x=x;(a.找到所有的let声明的变量,在环境中创建这些变量;b.开始执行代码,注意:现在还没
* 开始初始化);c.执行x=x,将x初始化为x,报错
* let的创建过程被提升了,但是初始化没有被提升;var的创建和初始化都被提升了;function的创建和
* 初始化和赋值都被提升了。
* 3.不允许重复声明
* 4.块级作用域(使匿名立即执行函数表达式不再必要了)
* 5.块级作用域与函数声明(ES5规定函数只能在顶层作用域和函数作用域中声明,不能在块级作用域中声明,
* 但浏览器为了兼容一些老代码没有遵循这个规则;ES6规定块级作用域中,函数声明语句行为类似于let,在
* 块级作用域之外不可用;但也为了兼容老代码,浏览器有自己的行为方式,在块级作用域中函数声明类似于var
* 会提升到全局作用域或函数作用域的头部,同时函数声明还会提升到所在的块级作用域的头部)
* 6.const命令(保证变量指向的那个内存的地址所保存的数据不改动,对于简单数据,值就保存在变量指向的
* 那个内存地址,因此等同于常量;但对于复合类型的数据,变量指向的内存地址保存的只是一个指向实际数据
* 的指针)
* 7.ES6有6种声明变量的方法:var function let const import class
* 8.gloabalThis对象
*/

浙公网安备 33010602011771号