浅谈一下promise的三个状态
1.pending进行中
pending。他的意思是待定的,将发生的,相当于一个初始状态。
创建promise对象时,且没有调用resolve或者reject时,会一直在初始状态。这个初始状态会随着调用resolve或者reject函数切换到另一个状态
let p = new Promise((resolve, reject) => {
})
console.log(p);//此时打印Promise {<pending>}
这个初始状态可以理解为对别人说出承诺的那个瞬间,说的这个时候,大家都不知道这个承诺是否能兑现
2.成功状态fulfilled
fulfilled,表示解决了,也就是这个承诺实现了,要实现从pending到fulfilled的转变,需要在创建promise对象时,在函数体中调用resolve方法(即第一个参数)
let p = new Promise((resolve, reject) => {
resolve(123)
})
console.log(p);//此时打印Promise {<fulfilled>: 123}
3.失败状态rejected
rejected。失败拒绝,表示这个承诺没有做到,要实现从pending到rejected的转变,需要在创建promise对象时,调用reject方法
let p = new Promise((resolve, reject) => {
reject(123)
})
console.log(p);//此时打印Promise {<rejected>: 123}
promise三种状态小结
1.状态可转化
创建时默认状态是pending,如果在函数体内部调用了第一个参数对应的函数,那么状态就变成fulfilled成功状态;
如果调用了第二个参数对应的函数,则变成rejected
pending ---- resolve() -->fulfilled
pending ---- reject() -->rejected
2.状态是不可逆的 一旦从pending转换到fulfilled或者是rejected,就不可能回到pending,也不能有fulfilled变成rejected
下面是let,var,const的区别
let和const是es6新增的声明变量的关键词,之前声明变量的关键词是var
作用域的区别
var定义变量在函数外部 , 是全局变量
在函数内部定义的变量 是局部变量 只在函数内部有效
需要注意 if判断 for循环里var定义的变量 没有局部作用域 全局可以访问
var a=10;
console.log(window.a);
function testFn(c) {
var b = 5;
console.log(b);
console.log(c);
}
testFn(100);
console.log(b);
if (true) {
var a = 0;
}
console.log(a);// 0
for (let i = 0; i < 10; i++) {
var a = 10;
}
console.log(a);// 10
let 定义的变量 只在let所在的代码块内有效
if (true) {
let a = 10;
console.log(a);// 10
}
console.log(a);// error
变量提升
// var拥有变量提升 提前调用会打印undefined
// let没有变量提升 没有声明就调用会报错
console.log(a);
var a = 10;
// 相当于
var a;
console.log(a);
a = 10
console.log(b)
let b = 1; //error
关于重复声明
// var声明的变量 可以重复赋值
// let声明的变量 不能重复赋值,否则执行报错
var a = 1;
a = 2;
a = 10;
console.log(a) //20
let a = 20 //error
const声明常量
const声明一个只读的常量。一旦声明,常量的值就不能改变。
// const声明即赋值,不可先声明后赋值
const a;//error
const b = 1;
b = 2;//不可改变b error
const的作用域和let相同。 只在声明的块级作用域内有效
常量不能改变指的是指向的地址不可变,但是我们只是改变里面的值,堆空间地址没变,所以是可以改变对象里的值的
const obj = {
name: 'hhh',
age: 18
}
obj.name = 'lll';// 这里只是改变了对象里的内容,指向没有改变
console.log(obj.name);// '111'
const obj = {// error 改变了obj的指向地址
name:'yxw'
}
有帮助到的话留下你的点赞吧