ES6~ES11
let变量声明
1. 变量不能重复声明
2. 存在块级作用域({})
3. 不存在变量提升
4. 不影响作用域链
const常量
1. 一定要赋初始值
2. 命名时一般使用大写
3. 值不能修改
4. 块级作用域,不存在变量提升
5. 对于数组和对象的修改不算对常量的修改,只有当数组或对象的内存地址发生改变时才会报错
解构赋值
1. 允许按照一定的模式从数组或对象中提取值,对变量进行赋值
模板字符串
1. 内容中可以可以出现html、换行符等等内容
2. 变量拼接:在模板字符串中使用变量${}
对象简写
1. 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。
ES6的箭头函数及特点
1. 允许使用箭头函数定义函数
2. this始终指向函数声明时所在作用域的this的值
3. 不能作为构造实例化对象
4. 不能使用arguments对象
Promise
1. promise.then返回的新promise的结果状态是由什么决定的?
是由then中指定的回调函数的执行结果决定的
如果执行错误或者抛出异常,新的promise的状态就会变成rejected,reason为返回的值
如果执行结果返回非promise对象的任何值,新的promise的状态会变成resolved,value为返回的值
如果执行结果返回一个新的promise,此promise的执行结果会成为新的promise
的结果
promise的状态改变,就会将then放入微队列中
2. promise如何串联多个操作任务?
promise的then返回一个新的promise,可以开成then的链式调用
通过then的链式调用串联成多个同步/异步任务
async和await
async函数的返回值是promise函数,promise对象的结果 由async的函数执行的结果决定
await右侧的表达式如果对象是promise对象,await返回的是promise成功的值
注意:await必须写在async函数中,但是async函数中可以没有await,如果await的promise抛出异常,需要通过trycatch来捕获异常
宏队列和微队列
宏任务:宿主(浏览器)发起的任务,如:定时器回调、dom事件回调、ajax回调
微任务:js引擎发起的任务,如:promise.then,promess.nextTick
js引擎首先必须先执行所有的初始化同步任务代码
每次去执行宏队列之前,都会确认微队列中是否有任务需要执行,有则优先执行微队列。否则就去执行宏队列