变量:
let ,let具有块级作用域,存在暂时性死区(在块级作用域let声明了一个变量,它所声明的变量就被绑定到当前这个区域,不受外部所影响),只有在它(let)声明的代码块中起作用:
for(var j = 0; j < 2 j++) {} console.log(j); // 2
for(let i = 0; i < 3 i++) {} console.log(i); // 报错: i 未被定义
const, const用于声明一个常量,在一个常量被声明后,值是不可改变的:
const str=123; // 声明一个常量
str=456;// TypeError: Assignment to constant variable.
let,const都没有声明提升,只能在声明后使用,在一个块级作用域内,同一个变量不能被重复声明,在块级作用域外不能访问作用域内的变量
结构赋值:
对象结构:
let node = {
type: "Identifier",
name: "foo"
};
// 使用结构分配不同的值
let { type, name } = node;
console.log(type); // "Identifier"
console.log(name); // "foo"
数组结构:
let colors = [ "red", "green", "blue" ];
let [ firstColor, secondColor ] = colors; //从colors中分别结构出 red,green, 未显式声明的则会被忽略
console.log(firstColor); // "red"
console.log(secondColor); // "green"
// 也可以直接为自己所需要的元素声明变量
let colors = [ "red", "green", "blue" ];
let [ , , thirdColor ] = colors;
console.log(thirdColor); // "blue"
混合结构:
let node = {
type: "Identifier",
name: "foo",
loc: {
start: {
line: 1,
column: 1
},
end: {
line: 1,
column: 4
}
},
range: [0, 3]
};
let {
loc: { start }, // 分别将node.loc.start和node.range[0]提取到变量start和startlndex中
range: [ startIndex ]
} = node;
console.log(start.line); // 1
console.log(start.column); // 1
console.log(startIndex); // 0
解构模式中的loc和range仅代表它们在node对象中所处的位置(也就是该对象的属性)。当使用混合解构的语法时,则可以从node提取任意想要的信息
Promise:
promise有三种状态:pending(等待,处理中) --> 1.resolve(完成) 2.rejected(失败,拒绝)
Promise对象中的then方法:
可以接收构造函数中处理的状态变化,then方法有2个参数,第一个函数接收resolved状态的执行,第二个参数接收reject状态的执行。
function fn(num) {
returnnewPromise(function(resolve, reject) {
if(typeofnum == 'number') {
resolve();
} else {
reject();
}
}).then(function() {
console.log('参数是一个number值');
}, function() {
console.log('参数不是一个number值');
})
}
fn('hahha');
fn(1234);
then方法的执行结果也会返回一个Promise对象。因此我们可以进行then的链式执行
catch的用法:
getNumber()
.then(function(data){
console.log('resolved');
console.log(data);
})
.catch(function(reason){
console.log('rejected');
console.log(reason);
});
在执行resolve的回调(也就是上面then中的第一个参数)时,如果抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个catch方法中
all的用法:
Promise的all方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调
Promise
.all([runAsync1(), runAsync2(), runAsync3()])
.then(function(results){
console.log(results);
});
用Promise.all来执行,all接收一个数组参数,里面的值最终都算返回Promise对象。这样,三个异步操作的并行执行的,等到它们都执行完后才会进到then里面,all会把所有异步操作的结果放进一个数组中传给then,就是上面的results