前端---闭包【防抖以及节流】----面试高频!

1.什么闭包

释放闭包

从以上看出:一般 函数调用一次会把内部的数据进行清除--但是这种操作却可以一起保留局部作用域的数据

// 优点:1、可以读取函数内部的变量 2、让这些变量始中存在局部作用域当中

2.闭包产生的两种业务场景:防抖、节流

2.1防抖

举例:写个按钮--写个点击事件

你狂点登录---login函数一直被执行!--这样子容易崩溃!

效果:点击登录--等待3s--实现登录

2.1节流【好比王者荣耀的冷却cd】

参考博主:前端性能优化之防抖&节流_前端防抖节流-CSDN博客

节流n 秒内只执行一次事件,即使n 秒内事件重复触发,也只有一次生效

应用场景:浏览器滚动事件、窗口大小的改变

举例:监听window的窗口大小

我只要不断拉窗口--会一直触发resize该事件!!--会造成大量计算

这么办!【思路就是两次触发的时间间隔到了指定时间就执行--并且记录第二次触发的时间,否则不执行】

换句话说:【

1:多次触发窗口---多次执行回调--多次获取当前时间 ---只有满足 延迟(当前时间--上次触发的事件>=延迟时间 )--fn就会被执行---记录当前时间时间作为上次触发时间节点

2:多次触发窗口---多次执行回调--多次获取当前时间 ---不满足 延迟(当前时间--上次触发的事件>=延迟时间 )--fn就不会被执行----直到你触发窗口的那次的当前时间刚好满足延长时间】

完善代码

javascript 复制代码
   /* 节流 */
    // 浏览器滚动事件、窗口大小的改变

    function thorttle(/* 需要进行节流处理的函数 */ fn, /* 延迟的时间 */ time) {
        // 记录上一次事件执行的时间
        let lastTime = 0
        let i = 1
        return function () {
            i++
            // 获取当前时间
            const nowTime = new Date().getTime()
            // cd剩余时间
            const remainTime = nowTime - lastTime
            if (remainTime - time >= 0) {
                fn()
                lastTime = nowTime
                console.log(i, 'i');
            }
        }
    }

    function _resize() {
        console.log("节流")
    }

    window.addEventListener("resize", thorttle(_resize, 2000))
相关推荐
kyriewen2 分钟前
我排查了一个React内存泄漏——罪魁祸首是这3个被忽略的清理函数
前端·javascript·面试
IT_陈寒9 分钟前
我又被JavaScript的隐式类型转换坑了
前端·人工智能·后端
其美杰布-富贵-李36 分钟前
03 ref、reactive 与 computed 响应式数据
前端·javascript·vue.js
OpenTiny社区38 分钟前
GenUI SDK v1.3.0 发布|多框架兼容,一键换物料,渲染器 & 演练场全面增强!
前端·ai编程
用户9385156350739 分钟前
useRef + Web Worker 实战:React 如何优雅地拥抱多线程
前端·javascript·react.js
他们叫我秃子1 小时前
前端开发转 Go 全栈(五):终于遇到熟人了,Go 的闭包和高阶函数原来这么像 JavaScript
前端·后端·go
用户61595868000221 小时前
从 0 写一个迷你 wujie:用原生 Web API 实现微前端
前端
妙码生花1 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(五十七):AI时代对组件封装的新理解、agInput 统一入口,动态表单预备
前端·后端·go
fairyly1 小时前
接手新项目不用硬啃源码,我的 TRAE Work 快速上手实战工作流
前端·ai编程·trae
搬砖记录员1 小时前
用 PyAutoGUI 手搓录屏"老板键":从原理到四套可跑源码,附工程化落地思考
前端