前端头条面经(卒)

 

昨天晚上头条一面,自己太菜了,结果挂了,分享一下自己的面经吧

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)}}

然后小姐姐追问我节流和防抖的区别:

节流不管事件触发多频繁,都会保证在规定时间内一定会执行一次真正的时间处理函数

防抖在最后一次请求事件后才触发一次

 

posted on 2019-03-15 14:33  袁233  阅读(372)  评论(0编辑  收藏  举报

导航