es6中常见问题

2023-12-13 06:08:31

目录

1、let 、const 、var的区别

2、箭头函数与普通函数的区别

3、JS事件循环

4、对Promise的理解


1、let 、const 、var的区别

var:可以重复定义,var 有预解析, var 没有块级作用域

let:不可以重复定义 、 没有预解析、 有块级作用域、 暂时性死区

const:不可以重复定义 、声明后不可以赋值、更新 、 没有预解析 、有块级作用域 、暂时性死区

2、箭头函数与普通函数的区别

1、箭头函数没有this,它内部的this由所处作用域(上下文)决定,普通函数有this

2、箭头函数没有arguments,普通函数有

3、箭头函数不能new,普通函数有

4、箭头函数没有函数提升,普通函数有

3、JS事件循环

JS是单线程,同一时间只能做一件事,为了避免耗时任务阻塞代码,JS通过事件循环来处理这种耗时任务(异步)

  • 先同步, 后异步

  • 异步分微任务(then,catch方法),宏任务(ajax、定时器、事件回调、script标签)

1.先执行宏任务(解析script标签)

2.从上往下执行,遇到同步代码,立刻放入js调用栈执行 遇到宏任务放到宿主环境(浏览器),遇到微任务放入微任务队列 当宿主环境的时间或事件触发,对应的回调进入宏任务队列

3.当JS调用栈空闲时,会清空微任务队列,然后再执行宏任务队列 执行完一个宏任务,在清空微任务队列

4、对Promise的理解

Promise是一个内置构造函数,接受一个函数(executor)作为参数 该参数函数立即调用,该执行函数可以放同步或异步 参数函数接受两个形参 resolve ,reject ; resolve ,reject 是函数 resolve()调用表示成功 reject()调用表示失败

promise实例身上有个then方法,then方法有两个参数

第一个参数: 成功时候的回调

第二个参数 :失败的时候的回调

promise三个状态 默认状态(等待态pending),成功态(fulfilled),失败态(rejected)

成功了就不能失败

?promise 6个静态方法:all( ) , any( ), race( ) , allSettled( ) ,reject( ), resolve( )

catch,和finally也是promise的方法

all方法:

all 传空数组时,resolve()接收,成功态,长度为0

all 传的值都是成功的promise ,打印结果是数组,对应每个成功的promise,有一个失败打印失败的信息

all传的不是数组 ,报错,走then的失败回调

all传的值是数组,但数组元素不是Promise,打印的结果是数组,

相当于将数组元素转成成功的promise

allSettled方法:

allSettled 传的是数组,数组元素为promise,不论成功或失败,都打印每个promise的详细信息

allSettled 传的是空数组,打印空数组,走then的成功回调

allSettled 传的是数组,但数组元素不是Promise,转成成功的promise,并打印详细信息

any方法:

any返回第一个成功的Promise

any参数不是数组报错,走then的失败回调

any 参数是数组,但数组元素不是promise,返回的是第一个元素,走then的成功回调

any 传的是空数组,走then的失败回调,打印AggregateError: All promises were rejected

race方法:

race 不管成功或失败,谁先回来,就打印谁的结果

race 参数不是数组,报错,走then的失败回调

文章来源:https://blog.csdn.net/m0_56713342/article/details/134918193
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。