1. let 与 var之间的区别
(1) 作用范围: let 作用于所处变量代码块, 而var作用于函数作用域。
(2) let不存在变量提升
(3) let存在暂时性死区(只要一进入当前作用域, 所使用的变量就已经存在,但不可获取,只有等到声明那一行,才可获取和使用变量)
(4) let不允许在相同作用域内,重复声明同一个变量
2. 块级作用域
a. 作用
(1) 防止内部变量被外部变量覆盖
(2) 防止用来计数的循环变量泄漏为全局变量
b. 实现
(1) let为javascript实现了块级作用域
(2) es6允许块级作用域任意嵌套,并且外层作用域不可以读取内层作用域的变量
(3) 内层块级作用域可以定义与外层块级作用域相同的参数名
3. 函数作用域和函数作用域
问题来源:函数能不能在块级作用域中声明??
对于未实现es6的浏览器:
(1) 对于es5来说,函数只能在顶层作用域和函数中声明,若在块级作用域中声明是非法的。但是浏览器没有遵循这个规定, 在块级声明函数时,函数将被提升到当前函数的头部。
(2) 而对于es6中,在块级作用域中声明函数时,将函数声明定义为let, 块级作用域不能使用
对于实现es6的浏览器:
(1) 允许在块级作用域内声明函数
(2) 函数声明类似于var, 实现状态t提升
(3) 函数提升还是提升所在的块级作用域的头部
块级作用域把多个操作封装在一起,相当于语句,没有返回值。可以用do实现返回值。
4. const 命令
(1) 基本用法
const声明的变量,一旦声明了, 就不可以更改,而且声明时,必须初始化。其它用法与let用法一样。
(2) 本质
const实际上保证不是变量的值不变,而是变量所指的地址不变。对于基本类型来说, 值保存变量多只的那个内存地址,等于常量。而对于引用类型来说,变量保存是地址,一个指针,至于指向数据结构是否变化无法保证。可以用object.freeze方法冻结对象内部的数据结构。
5. es6声明变量的6种方法
var , function, let, const, class, import