(前端面试)每日5题

1、es6中箭头函数的理解

        箭头函数内的this是静态的,总是指向定义时所在的对象,而不是调用时,并且this指向是不可改变的

        箭头函数不能当作构造函数,也就是不可以用new命令,会报错

        箭头函数不存在arguments对象,也就是不能使用伪数组去接收参数,可以使用rest参数代替

2、es6中的rest参数

        用于获取函数多余的参数,形式:(...变量名),把一个分离的参数序列整合为一个数组,值是一个数组

        rest参数只能放在最后一个

3、es6中数组和对象的解构

        解构:一种提取数据的方式

        数组的解构:以元素位置为匹配条件

let [a, b, c] = [1, 2, 3];

        对象的解构:以属性名称为匹配条件

let obj = {name: '李华', age: 26, children: {name1: '李明', age1: 2}};
let {name, age, children: {name1, age1};

4、es6中对promise的理解

//promise是异步编程的一种解决方案
       /*
        三种状态:pending(进行中),fulfilled(已成功),rejected(已失败)
        特点:状态不受外界的影响,只有异步操作的结果,决定当前是哪一种状态
        一旦状态改变就不会再变(pending-->fuilled,pending-->rejected)
        用法:Promise是一个构造函数,用来生成Promise实例
        Promise构造函数是接收一个函数作为参数,这个函数有两个参数
       */
        // const p = new Promise(function (resolve, reject) {
        //     //resolve函数:将Promise对象的状态从未完成变成成功,在一部操作成功时候调用
        //     resolve()//返回异步操作的结果,作为参数传递出去
        //     //reject函数:将Promise对象的状态从未完成变成失败,在异步操作失败的时候调用,
        //     reject()//返回异步操作的结果,作为参数传递出去
        // })
        //Promise实例方法
        //then()
            const p = new Promise(function(resolve, reject) {
                setTimeout(() => {
                    const time = new Date().getTime()
                    if(time%2 == 0) {
                        resolve('成功的数据time=' + time)
                    }else{
                        reject('失败的数据time=' + time)
                    }
                }, 1000)
            })
            // p.then((value) => {//resolved(已成功)的状态
            //     console.log(value);
            // }, 
            //     // (reason) => {//rejected(已失败)的状态
            //     // console.log(reason);
            //     // }
            // ).catch((value) => {
            //     console.log(value)
            // })
        //catch(): 用于指定发生错误的回调函数,一般来说通过catch替代then中第二个参数
         
        //finally:用来指定不管Promise对象状态最后如何,都会执行的操作
            p.then((value) => {
                console.log(value);
            }).catch((value) => {
                console.log(value);
            }).finally(() => {
                console.log('最后的结果');
            })

5、es6中对promise.all的理解

 //用于将多个Promise实例,包装成一个新的Promise实例
        let p1 = new Promise((resolve, reject) => {
            resolve('成功01');
        })
        let p2 = new Promise((resolve, reject) => {
            resolve('成功02');
        })
        let p3 = new Promise((resolve, reject) => {
            resolve('成功03');
            // reject('失败03');
        })
        //参数可以不是数组,但是必须是iterator接口
        let pAll = Promise.all([p1, p2, p3]);
        console.log(pAll);
        //pAll的状态,由p1,p2,p3来决定,只有当这三个都为成功,pAll才会成功
        //但是有个一个失败,那么就是失败,这个时候第一个失败的实例的返回值,会传递给pAll的回调函数
        //如果作为参数的实例,自己定义了catch方法,那么它一旦rejected,不会触发pAll的catch方法
        pAll.then((value) => {
            console.log(value);
        }).catch((reason) => {
            console.log(reason)
        })
        //多个请求结果合并在一起
        function getBannerList() {
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve('轮播图的数据');
                }, 1000)
            })
        }
        function getMusicList() {
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve('歌曲列表的数据');
                }, 2000)
            })
        }
        function getCateList() {
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve('歌单分类的数据');
                }, 3000)
            })
        }
        function initLoad() {
            let All = Promise.all([getBannerList(), getMusicList(), getCateList()])
            All.then((value) => {
                console.log(value);
            })
        }
        initLoad()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值