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

JS初步了解闭包(含实践)

闭包的概念:
一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域
简单理解: 闭包=内层函数 + 外层函数的变量
闭包的作用:封闭数据,提供操作,外部也可以访问函数内部的变量
闭包基本格式:

    // 外层函数
    function fun(){
        // 外层函数变量
        let num = 1
        // 内层函数
        function fn() {
            console.log(num) //1
        }
        //外层函数使用内部函数的变量
        return fn
    }
    let f = fun()
    f() //1

简约写法:

    function fun() {
        // 外层函数变量
        let num = 1
        // 内层函数
        return function () {
            console.log(num) //1
        }
    }
    let f = fun()
    f()

实践:统计函数调用的次数

传统写法:

    let i = 0
    function fun(){
        i++
        console.log(i)
    }
    fun()//调用一次就++

但是这个 i 是全局变量,很容易被修改

接下来我们使用闭包的形式:

    function fun() {
        let i = 0
        function fn() {
            i++
            console.log(i)
        }
        return fn
    }
    let f = fun()
    f() //调用一次就++

这样 i 就不会被修改,实现了数据私有
但可能会引起内存泄漏
所以闭包可能会引起内存泄漏
感谢大家的阅读,如有不对的地方,可以向我提出,感谢大家!


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

相关文章:

  • MCU的时钟体系
  • 基于Springboot+Vue的中国蛇类识别系统 (含源码数据库)
  • SpringBoot集成itext导出PDF
  • 【第四课】rust声明式宏理解与实战
  • 嵌入式课程day13-C语言指针
  • PostgreSQL TRUNCATE TABLE
  • 带你深入了解队列(c/cpp双版本模拟实现)
  • 4. 寻找两个正序数组的中位数
  • 【C++初阶】类和对象——构造函数析构函数拷贝构造函数
  • Oracle查询用户所有表的语句
  • 在windows服务器上部署一个单机项目以及前后端分离项目
  • 力扣:141. 环形链表(Python3)
  • Python自动化测试框架之unittest使用详解!
  • clickhouse、Doris、Kylin对比
  • 简单了解一下:NodeJS的WebSocket网络编程
  • 【安装tensorflow-CPU版本】
  • javascript原生态xhr上传多个图片,可预览和修改上传图片为固定尺寸比例,防恶意代码,加后端php处理图片
  • vue使用smooth-signature实现移动端电子签字,包括横竖屏
  • Mysql数据库 4.SQL语言 DQL数据查询语言 查询
  • 1. 两数之和、Leetcode的Python实现
  • vtk 绘制等高线
  • mavros黑白名单设置
  • React Swiper.js使用(详细版)3D聚焦特效,自定义导航按钮等
  • Node.js 的 CommonJS ECMAScript 标准用法
  • 【算法练习Day30】无重叠区间 划分字母区间合并区间
  • 【软考】系统集成项目管理工程师(九)项目成本管理【4分】