闭包原理及应用场景

1.官方说法:函数中的函数,至少包含两个函数,他们是嵌套关系
2.个人理解:1.需要一个不被销毁的函数空间。2.需要直接或间接返回一个函数。3.函数内部需要访问外部函数的私有变量。即内部函数可以称为外部函数的闭包。
3.应用场景:
  1. 函数柯理化
  2. 防抖
  3. 节流
  4. 模块化开发
4. 函数柯理化

        原理:一个多参数的函数转化为一系列单参数函数

        例子:

add(a,b,c,d) {

      return a + b + c + d;

    },

keLi(fn,...arg){

      let length = fn.length

      let args = arg || []

      return function(...args1) {

        args =[...args,...args1]

        if(args.length === length){

        return fn(...args)

      }else{

        return this.keLi(fn,...args)

      }

      }

    },

调用(如果传参数量不够时返回为函数)

let num = this.keLi(this.add,'2','33','44')('5')

console.log(num);  //233445

 5.防抖

为了防止请求特别频繁 执行最后一次

        //获取元素
        const btn = document.querySelector('button')
        // 定义一个变量用来表示我们的定时器
        let t = null
        // 给按钮添加点击事件
        btn.onclick = function (){
            // 首先进来以后要做的就是关闭定时器
            clearTimeout(t)
            // 开启一个定时器
            t = setTimeout(function () {
                console.log(111);
            },1000)
        }
6.节流

=> 指的就是在一定的时间内执行一次

=> 也是用来降低你的频率(次数)

=> 只允许你执行一次

         // 获取元素
        const btn = document.querySelector('button')
        // 定义一个开关
        let flag = true 
        // 添加点击事件
        btn.onclick = function () {
            // 首先要做的就是判断开关的一个状态
            if (flag) {
                // 就是关闭我们的开关
                flag = false
                console.log(111);
            }
            // 多长时间以后在让你执行 , 需要开启开关
            setTimeout(function () {
                // 这里我们需要开启开关
                flag = true
            },1000)
        }
7.防抖和节流的区别 
特性防抖(debounce)节流(throttle)
执行时机最后一次触发后延迟执行固定间隔执行
触发频率不固定,取决于用户操作间隔固定频率
适用场景搜索建议、窗口resize、输入验证滚动事件、鼠标移动、动画处理
目标确保只执行最后一次操作的处理确保操作以合理频率执行
结果只在用户停止操作后执行一次在操作过程中均匀执行多次
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值