昨天晚上头条一面,自己太菜了,结果挂了,分享一下自己的面经吧
1.a.().b().c() 链式调用打印a,b,c
我太菜了吧,过后写了一种实现方法:
let o={ a:function(a){ console.log(a) return this;}, b:function(b){ console.log(b); return this;}, c:function(c){ console.log(c); return this}
} o.a(a).b(b).c(c)
主要是使用return this
2.一到闭包的题,让你说运行结果,这种类型的题很多,可以百度一下
然后小姐姐问我解决方案,我说改用es6的语法,把var变成let
3.小姐姐就扯到了es6的数组方法,让我用reduce实现map
给我了 prev,cur,index,arr 4个参数
let nums=[10,20,30,40]; let map=nums.reduce((prev,cur,index,arr)=>{ prev=nums[index-1]; cur=nums[index]; console.log(prev,cur,index); },0)
不知道这样实现对不对
4.小姐姐又让我讲了下前端性能优化,
主要是前面的题没有答上来就很尴尬了,我心态有点崩了,然后这个也没有答好,回答的前后逻辑性不强
我讲了可以减少http请求优化,然后提到了懒加载,小姐姐说这个也没有减少请求,然后我又扯了cdn优化,反正也没说对
行吧,我去补一补cdn优化:
然后我说函数节流和防抖,小姐姐让我回答节流和防抖的区别
函数节流主要是 在规定时间内,只有一次触发事件的回调函数,不要频繁的请求http,
可以用定时器来解决,小姐姐让我写一个节流函数,然后我很菜
function throttle(func,wait){
let timer;
return ()=>{
if(timer)
return ;
timer=setTimerout(()=>{
func();
timer=null},wait)}
}
函数节流,也可以用时间戳实现节流
function trottle(func,wait){ let last=0; return ()=>{ let curTime=+new Date(); func.apply(this,arguments) last=+new Date();}
函数防抖:
触发事件后在n秒内函数只能执行一次,若在这n秒内又触发了事件,则会重新计算函数的执行时间
应用场景:
连续事件中,只需触发一次回调
function debounce(func,wait){ let timer; return ()=>{ clearTimeout(timer) timer=setTimeout(func,wait)}}
然后小姐姐追问我节流和防抖的区别:
节流不管事件触发多频繁,都会保证在规定时间内一定会执行一次真正的时间处理函数
防抖在最后一次请求事件后才触发一次