这两家公司都是要求去现场先做笔试题,然后进行一面。由于笔试题无法全部记忆,现将其中的几道题汇总一下
1.使用函数实现一个eventBus
class EventBus{
constructor(){
this.__events = {}
// 对象结构: {click: [{listener: fn,once:false}]}
}
on(event,listener){
if(!event || !listener){
throw Error('参数错误')
}
// 如果当前event不在__events里,则新建
if(!this.__events[event]){
this.__events[event] = []
}
// once是为了只执行一次
this.__events[event].push({
listener,
once: false || listener.once
})
}
off(event,listener){
const listeners = this.__events[event]
if(listeners && listeners.length){
const newListeners = listeners.filter((i,idx) => i.listener !== listener)
this.__events = [...newListeners]
}
}
once(event,listener){
this.on(event,{
listener: listener,
once: true
})
}
emit(event,...args){
const listeners = this.__events[event]
if(!listeners || !listeners.length){
return false
}else{
listeners.forEach((i,idx)=>{
i.listener(...args)
if(i.once){
this.off(event,i.listener)
}
})
}
return true
}
}
2.flex布局如何将1、2、3个块按照3、2、1的方式倒排
通过在子元素设置order,order越小越靠前
3.flex布局如何将1、2、3个块按照1:2:3的大小自动填充空间
子元素分别设置flex-grow:1 、2、3
flex布局的题 it.cha138.com/jingpin/sho…
4.promise、setTimeout等的输出顺序
5.强缓存和协商缓存中有哪些字符,字符的优先级是怎样的 juejin.cn/post/708317…
6.输出题
console.log({} == false) // false
console.log({} == true) // false
console.log([] == true) // false
console.log([] == false) // true
let a = '10';a.sum=1;console.log(a.sum) // undefined