cvte前端实习生笔试

cvte前端实习生笔试

刚考完试,印象比较深的两道错题,记录一下

    new Promise((resolve)=>{
        console.log("1")
        resolve(2)
    }).then((a)=>{
        console.log(a)
    })
    setTimeout(()=>{
        console.log("3")
    })
    console.log("4")

这道题错的实在是不应该,当时把setTimeout是创建了一个宏任务,promise.then是创建微任务记反了,正确的输出结果应该是promise中的”1”立即执行,然后执行“4“,主线程(宏任务)执行完毕,执行该宏任务产生的微任务,所以执行”4“,最后执行下一个宏任务,输出”3“

这是一道编程题,题目大意是(实现一个Event类(发布订阅模式))

    class Event{
        strFnMap=new Map()
        on=function (str,fn){
            let myMap=this.strFnMap
            if(!myMap.get(str)){
                let temp=[]
                temp.push(fn)
                myMap.set(str,temp)
//上面这三行代码考试时写的是myMap.set(str,[].push(fn))
//没注意到Array.push()返回值是数组长度
            }
            else{
                let temp=myMap.get(str)
                temp.push(fn)
                myMap.set(str,temp)
            }
        }
        emit=function (str,arg1,arg2) {
            let myMap=this.strFnMap
            if(myMap.get(str)){
                for(let i=0;i<myMap.get(str).length;i++){
                    myMap.get(str)[i].call("",arg1,arg2)
    //考试时这里写的apply,但是运行报错了(CreateListFromArrayLike called on non-object)
    //很迷惑,我记得调用的函数不依赖对象值的情况下apply第一个参数也是可以为任意值的呀
                }
            }
        }
        off=function (str) {
            let myMap=this.strFnMap
            if(myMap.get(str)){
                myMap.delete(str)
                
            }
        }
    }
    function fn1(name,city){
        console.log(`欢迎${name}来到${city}`)
    }
    function fn2(name){
        console.log(`欢迎${name}`)
    }
    var a=new Event()
    a.on("Say1",fn1)
    a.on("Say1",fn2)
    //a.off("Say1")
    a.emit("Say1","小明","广州")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值