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

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))
相关推荐
mldong3 小时前
你的 Vue3 项目也能有钉钉同款审批流设计器:npm 装包,10 分钟画出第一条审批流
前端·vue.js
2分钟速写快排3 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
passerby60614 小时前
如何自己造一个时间处理库
前端·javascript·github
走到天涯海角5 小时前
react里面的长列表渲染优化
前端·react.js·前端框架
小羊没烦恼!5 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
北岛贰5 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
mayaairi7 小时前
Vue2 组件通讯(三):全局事件总线、PubSub、插槽与组件实例属性
前端·javascript·vue.js
kyriewen7 小时前
面试官问我:AI 都能写代码了,前端凭什么还值 25K
前端·javascript·人工智能
风骏时光牛马8 小时前
AI源码分析:拆解模型底层实现逻辑
前端
IT_陈寒8 小时前
React子组件莫名其妙重渲染?你可能漏了这个Hook
前端·人工智能·后端