JS:手写防抖和节流(*****五颗星)

1.防抖

防抖:用户触发时间过于频繁,只要最后一次事件的操作,实现原理为设置一个定时器,约定在xx毫秒后再触发事件处理,每次触发事件都会重新设置计时器,直到xx毫秒内无第二次操作。

1.封装防抖代码如下:

     //封装的防抖
        function debounce(fn,delay){
            let t=null
            return function(){
                if(t!==null){
                    clearTimeout(t)
                }
                t=setTimeout(()=>{
                    fn.call(this)
                },delay)
            }
        }

2.防抖示例:

1.search搜索联想,用户在不断输入值时,用防抖来节约请求资源

<input type="text">
    <script>
        let inp=document.querySelector("input")
        inp.oninput=debounce(function(){
            console.log(this.value)
        },500)
		//封装的防抖
        function debounce(fn,delay){
            let t=null
            return function(){
                if(t!==null){
                    clearTimeout(t)
                }
                t=setTimeout(()=>{
                    fn.call(this)
                },delay)
            }
        }
    </script>

2.window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次

<script>
        window.onresize=debounce(function(){
            let windowSize={
                width:this.innerWidth,
                height:this.innerHeight
            }
            console.log(windowSize)
        },500)
		//封装的防抖
        function debounce(fn,delay){
            let t=null
            return function(){
                i

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

前端面试题 文章被收录于专栏

前端面试的一些常问问题、问题的具体实现(可直接运行)以及底层原理

全部评论
还应该得到arguments,传入fn.call中,不然获取不到事件event
点赞 回复 分享
发布于 2023-04-25 19:42 重庆

相关推荐

ps:~~鼠鼠从4.3开始认真学习前端(为什么4.3开始学?请佬们移步我上一篇推文),历经半个月的摧残,于今天又参加了小米的前端面试。1.项目:“项目是自己做的?有企业项目吗?”(鼠鼠因为前天的快手面试,对自己项目异常敏感,还是准备了一些说辞)2.“我看你简历写的vue?react接触过没?”&nbsp;&nbsp;“vue2和vue3都用过?”&nbsp;&nbsp;“你能说说不同吗?”(回答不同——由于是鼠鼠的人生第二次面试,全程一直紧张,只说了从vue2的选项式写法到vue3的组合式写法转变不太习惯;之前准备的defineproperty和proxy八股忘记背一背了,属于是白背了)3.&nbsp;从url输入,到返回结果,经历了什么?(丸辣,这么简单的题我当时卡壳了,我当时408学了个啥?)4.浏览器缓存?(在面试官提醒下想到了强缓存和协商缓存,之前一直再说localstorage和sessionstorage以及cookie,我真废)5.cookie细说6.JWT(问这个是因为项目写了)7.&nbsp;vue钩子函数,捕获错误?(不是try&nbsp;catch)8.css隐藏(丸辣,说成visibility:none(应该是hidden)了,太紧张了)9.事件循环说一说10.微任务,宏任务有哪些11.js为什么要有异步(好像是有这么一问,最后聊天聊到的)12.手撕扁平化(递归实现的,因为鼠鼠最熟悉的是c语言,给新数组赋值用了=,最后想起来才用的push)其余不记得了。13.反问环节Conclusion:面试官很好,很有耐心,全程引导,不会就提醒一下,实在不会就跳过,全程无压力。还推荐了学习方法。(其实鼠鼠觉得是kpi面,因为看了牛油们的小米都有笔试,可我只做了个测评就约面了,类似性格测试的那种。总之也没抱希望,权当涨经验了,鼠鼠自知还需要小厂的历练,毕竟只学了半个月,希望毕业前能签个小厂吧。)共勉
小米一面360人在聊 查看13道真题和解析
点赞 评论 收藏
分享
04-24 08:25
已编辑
门头沟学院 前端工程师
15min实习/项目+30min八股+45min手撕(简历写了很多性能优化+Ai)实习/项目:1.实习做了什么,技术栈是什么&nbsp;&nbsp;React2.React的hook,Vue中也有相应的实现,具体举例&nbsp;&nbsp;&nbsp;&nbsp;useState/ref&nbsp;3.实现了哪些性能优化&nbsp;&nbsp;&nbsp;&nbsp;CDN服务4.RBAC权限管理怎么实现的&nbsp;&nbsp;&nbsp;&nbsp;数据权限+功能权限5.项目中用到的打包部署&nbsp;&nbsp;&nbsp;&nbsp;Webpack6.后端开发工具调用如何实现&nbsp;&nbsp;&nbsp;&nbsp;7.你在项目中遇到过的难点以及你是怎么解决的八股:1.路由懒加载的实现方式&nbsp;&nbsp;&nbsp;&nbsp;import()语法实现代码分割2.输入url到浏览器到后端给出响应的过程&nbsp;DNS&nbsp;&nbsp;TCP&nbsp;HTTP&nbsp;3.HTTPS对于HTTP做了哪些改进&nbsp;&nbsp;4.对称加密和非对称加密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AES&nbsp;公钥和私钥配对5.CDN服务器原理&nbsp;&nbsp;&nbsp;&nbsp;CDN节点从源站拉取内容并缓存,用户从最近的服务器获取数据6.CDN回源过程是怎样的&nbsp;&nbsp;&nbsp;&nbsp;7.你知道哪些性能优化效果评估指标&nbsp;&nbsp;&nbsp;&nbsp;8.骨架屏如何实现优化的&nbsp;&nbsp;&nbsp;&nbsp;在页面加载时显示的占位图形界面9.虚拟滚动优化列表渲染如何进行优化的&nbsp;&nbsp;&nbsp;&nbsp;只渲染当前窗口可见的列表项,而不是一次性渲染整个列表&nbsp;&nbsp;节流10.浏览器本地存储方式&nbsp;&nbsp;&nbsp;&nbsp;Cookie&nbsp;&nbsp;LocalStorage&nbsp;SessionStorage11.浏览器缓存机制&nbsp;&nbsp;&nbsp;&nbsp;强缓存&nbsp;&nbsp;协商缓存12.Webpack打包原理&nbsp;&nbsp;&nbsp;&nbsp;解析入口文件,​​构建依赖图,​​Loader&nbsp;处理​​,插件干预​,输出&nbsp;chunk&nbsp;文件13.操作系统中虚拟地址是什么,虚拟地址的优点&nbsp;&nbsp;&nbsp;&nbsp;由CPU生成的逻辑地址,将虚拟地址转换为物理地址,更大的地址空间14.说一下JavaScript的事件循环机制&nbsp;&nbsp;宏任务&nbsp;微任务&nbsp;Promise15.promise怎么解决地狱回掉的&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;方法链式调用手撕:寄了Promise&nbsp;(实现了部分,让我讲一下内部的逻辑)深拷贝(测试用例有target.target&nbsp;=&nbsp;target&nbsp;导致循环调用,要用weakMap来实现)反问:1.具体业务:商家支付2.哪些需要改进的点:不够深,https,性能优化指标没答上来,手撕没手撕出来3.AI方向:AI催债,信贷评估等等4.出结果:2-3天
查看22道真题和解析
点赞 评论 收藏
分享
评论
4
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务