当前位置: 首页 > article >正文

闭包的理解及应用

闭包

  • 闭包就是指有权访问另一个函数作用域中的变量的函数
  • MDN 上面这么说:闭包是一种特殊的对象。

闭包的作用域链包含着它自己的作用域,以及包含它的函数的作用域和全局作用域。闭包的注意事项
通常,函数的作用域及其所有变量都会在函数执行结束后被销毁。但是,在创建了一个闭包以后,
这个函数的作用域就会一直保存到闭包不存在为止。

我们首先知道闭包有3个特性:
①函数嵌套函数
②函数内部可以引用函数外部的参数和变量
③参数和变量不会被垃圾回收机制回收

优点:
①保护函数内的变量安全 ,实现封装,防止变量流入其他环境发生命名冲突
②在内存中维持一个变量,可以做缓存(但使用多了同时也是一项缺点,消耗内存)
③匿名自执行函数可以减少内存消耗

闭包的缺点就是常驻内存会增大内存使用量,并且使用不当很容易造成内存泄露。
如果不是因为某些特殊任务而需要闭包,在没有必要的情况下,在其它函数中创建函数是不明智的,
因为闭包对脚本性能具有负面影响,包括处理速度和内存消耗。

// 防抖
function debounce(fn, wait) {
    let timeout = null;
    return function() {
        let context = this;
        let args = arguments;
        if (timeout) clearTimeout(timeout);
        let callNow = !timeout;
        timeout = setTimeout(() => {
            timeout = null;
        }, wait);
        if (callNow) fn.apply(context, args);
    };
}
 
// 使用示例
window.addEventListener('resize', debounce(function() {
    console.log('窗口大小已改变');
}, 250));

// 截流
function throttle(fn, wait) {
    let previous = 0;
    return function() {
        let context = this;
        let args = arguments;
        let now = new Date();
        if (now - previous > wait) {
            fn.apply(context, args);
            previous = now;
        }
    };
}

// 使用示例
window.addEventListener('scroll', throttle(function() {
    console.log('滚动事件被触发');
}, 200));


http://www.kler.cn/a/510660.html

相关文章:

  • 【Cadence tip】噪声仿真方法
  • uni-app vue3 常用页面 组合式api方式
  • mysql_real_connect的概念和使用案例
  • 麒麟操作系统服务架构保姆级教程(十一)https配置
  • 抖音a_bogus,mstoken全参数爬虫逆向补环境2024-06-15最新版
  • Typora + PowerShell 在终端打开文件
  • # Rust Actix Web 入门指南
  • Avalonia系列文章之小试牛刀
  • 栈和队列经典例题
  • Git版本控制 – 创建和维护项目Repository
  • 数据结构漫游记:队列的动态模拟实现(C语言)
  • Python基础06(字符串格式化/操作方法)
  • Node.js 到底是什么
  • 微服务学习-OpenFeign 简化服务间调用
  • 【第二十周】U-Net:用于生物图像分割的卷积神经网络
  • ARM GCC编译器
  • LeRobot安装教程
  • [实现Rpc] 环境搭建 | JsonCpp | Mudou库 | callBack()
  • VUE学习笔记(入门)17__小黑记事本综合案例
  • Oracle 深入学习 Part12: Managing Indexes (管理索引)
  • A Dual-Module Denoising Approach 解读
  • ES6是什么
  • Agentic AI 和 AI Agent 之间的区别(ChatGPT回答)
  • 【2024年华为OD机试】(B卷,100分)- 计算最接近的数 (Java JS PythonC/C++)
  • 【专题二 二叉树中的深搜】230. 二叉搜索树中第K小的元素
  • 微软宣布Win11 24H2进入新阶段!设备将自动下载更新