Overview
let
- 声明的变量只在
let
命令所在的代码块内有效 - 没有变量提升,必须先声明后使用
- 暂时性死区:代码块内部存在
let
声明的变量,声明之前都是不可用的,即使父作用域有该变量
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
- 同一个作用域内不允许重复声明同一个变量
块级作用域
-
ES5
只有全局作用域和函数作用域 -
let
实际上是为JS
增加了块级作用域 - 替代了立即执行函数表达式(
IIFE
) - 块级作用域可以声明函数(
ES5
中规定不可以,但是大部分浏览器环境都支持) -
ES6
中为了兼容之前的代码,块级作用域内声明的函数,行为类似于var
声明的变量 -
ES6
中建议使用函数表达式,不是函数声明语句
// 函数声明语句
{
let a = 'secret';
function f() {
return a;
}
}
// 函数表达式
{
let a = 'secret';
let f = function () {
return a;
};
}
const
- 声明一个只读的常量,声明以后就不能改变
-
const
作用域与let
相同 -
const
声明的变量并不是变量内容不可变,而是变量指向的地址不可变
顶层对象
-
浏览器环境中顶层对象是
windows
;node
环境中是global
-
ES6
中let
、const
、class
声明的全局变量不属于顶层对象的属性(ES5
中这顶层对象的属性赋值和全局变量是一样的)
数组的解构赋值
-
ES6
允许写成这样就行赋值:let [a, b, c] = [1, 2, 3]
- 只要等号右边是具有
Iterator
接口的某种数据结构就可以采用这种赋值方式 - 等号左边的值允许有默认值
let [x, y = 'b'] = ['a']
Generator
-
ES6
提供的一种异步编程的解决方案 -
generator
函数可以理解成一个状态机,封装了多个内部状态 - 返回一个可迭代对象,可以依次遍历函数内的每一个状态
- 形式上与普通函数的区别是
function
关键字后带一个*
(星号) - 使用
yield
表达式来定义不同的内部状态 -
yield
表达式只能用在generator
函数中,其他地方会报错
扩展运算符(...)
- 扩展运算符(
spread
)是三个点(...
) - 将一个数组转为用逗号分隔的参数序列
欢迎关注微信公众号(coder0x00)或扫描下方二维码关注,我们将持续搜寻程序员必备基础技能包提供给大家。
网友评论