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)或扫描下方二维码关注,我们将持续搜寻程序员必备基础技能包提供给大家。










网友评论