当前位置: 首页 > Web前端 > JavaScript

手写题总结

时间:2023-03-27 14:17:40 JavaScript

1.防抖:事件触发后n秒后执行回调。如果在这n秒内再次触发,则重新启动定时器。函数去抖动(fn,延迟){vartimer;//维护一个定时器返回函数(){var_this=this;//使用debounce执行范围varargs=arguments;如果(计时器){clearTimeout(计时器);}timer=setTimeout(function(){fn.apply(_this,args);//使用apply指向调用debounce的对象,相当于_this.fn(args);},delay);};}2.throttling:事件n秒内只触发一次,n秒内再次触发则只生效一次。功能油门(fn,延迟){varprevious=0;//使用闭包返回一个函数,使用闭包函数外的变量previousreturnfunction(){var_this=this;var参数=参数;varnow=newDate();if(now-previous>delay){fn.apply(_this,args);以前=现在;}}}13.浅拷贝函数clone(target){letcloneTarget={};for(constkeyintarget){cloneTarget[key]=target[key];}返回cloneTarget;};4。深拷贝函数clone(target,map=newMap()){if(typeoftarget==='object'){letcloneTarget=Array.isArray(target)?[]:{};if(map.get(target)){//解决循环引用returnmap.get(target);}map.set(target,cloneTarget);for(constkeyintarget){cloneTarget[key]=clone(target[key],map);}返回克隆目标;}else{返回目标;}};基准。2、将待排序的元素分块,将比参考元素大的元素移到参考元素的右边,将比参考元素小的元素移到左边。3.对左右块重复上述步骤,直到所有元素都有序(递归过程)functionquick(arr){if(arr.length<=1){returnarr;}varrightArr=[]varleftArr=[]varcenterIndex=Math.floor((arr.length)/2)varcenterValue=arr.splice(centerIndex,1)[0]for(vari=0;i=0;j--){if(item>handAry[j]){handAry.splice(j+1,0,item);休息;}if(j===0){handAry.unshift(item)}}}returnhandAry;}