【学习笔记67】JavaScript中的闭包

news2024/10/6 6:03:01

一、认识函数的过程

1. 定义

  1. 堆内存中开辟一段内存空间(XF001)
  2. 把函数体的内容,完全百分百的照抄一份,存放在内存空间中(XF001)
  3. 把内存空间的地址(XF001) 赋值给函数名

 2. 调用

  1. 根据函数名内存储的地址 (XF001)  ,去堆内存中找到对应函数
  2. 会去运行内存中, 开辟一段新的内存, 用于运行函数 (函数作用域)
  3. 形参赋值---预解析---函数代码全部执行结束
  4. 函数执行完毕之后, 这段内存空间会被销毁
        function fn() {
            let a = 100
            console.log(a)
        }
        fn()

二、认识不会被销毁的内容空间

1. 函数向外部返回了一个引用数据类型(返回的是引用数据类型的地址)

2. 外部有一个变量接受这个返回值 (外部变量中有变量,拿到这个引用地址)

3. 为了我们后续能够正常使用, JS 不会把这个函数的运行空间销毁

        function fn () {
            let obj = {
                a: 1,
                b: 2
            }
            return obj
        }
        let o1 = fn()
        console.log(o1)

 三、闭包

  •  重点:看清楚我们调用的是那个函数

1、构成条件

  • 需要一个不会被销毁的函数执行空间
  • 需要直接或间接的返回一个函数
  • 内部函数使用外部函数的私有变量

2、闭包的好处

  • 延长变量的作用域(使用时间)
  • 函数外部可以使用函数内部的变量

3、闭包的弊端

  • 因为闭包的存在就一定代表一个函数执行空间不会被销毁, 如果大量使用闭包, 会导致内存空间占据严重

4、代码实现

        function outer() {
            let a = 100
            let str = 'QF001'
            let obj = {
                a: 1,
                b: 2
            }
            function inner() {
                return a;
            }
            return inner;
        }

        // 1. 调用outer到内层函数inner, 存到了变量res中
        let res = outer();

        /**
         *  2. 调用res 也就是调用内层函数inner, 调用完成之后,因为函数内部return str,
         *      得到了一串字符串
         *      将这个字符串存储到了newStr这个变量中
        */
        let newStr = res();

        // 3. 打印newStr 得了outer函数中str变量
        console.log(newStr); // 100

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/47659.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx安装Openresty加载Lua代码

1、下载 VM环境:ubuntu 16 http://openresty.org/cn/download.html 我选择的是截图红框的那个版本,其他高级的版本,我编译的时候都会报错,所以选择了这个版本,大家编译失败的时候不要放弃,继续选择其他版…

【PS-8】选区

目录 矩形选框工具 先选区再按【shift】,正方形选区 选区的同时按【ALT】,从中心点选区 选区时按【shiftalt】,从中心点建立正方形选区 模式1:添加到选区 模式2:新选区 模式3: 从选区减去 模式4&am…

《C++Primer》-1-前序与基础第I部分重点

文章目录第一章 开始1. c之与其他语言的优点?2. c语言的组成3. 标准输入输出cin、cout4. include格式第二章 变量和基本类型1. 无符号数的使用注意2. 初始化注意事项3. 声明与定义4. 标识符的下划线规则5. &引用、取地址&、指针的区别6. 如何理解“因为引用…

Rainbow Brackets的配色修改和使用

修改配色:) 敲好看内!! 记得每个都要改噢! 5分别对应的是: 圆括号 方括号 波形括号 尖括号 6分别对应的是: ECB1E9 F6F0A9 78B8EF F3BBA2 A9D57E 使用方式 Ctrl 鼠标右键:高亮{}…

C++ Reference: Standard C++ Library reference: Containers: list: list: end

C官网参考链接&#xff1a;https://cplusplus.com/reference/list/list/end/ 公有成员函数 <list> std::list::end C98 iterator end(); const_iterator end() const; C11 iterator end() noexcept; const_iterator end() const noexcept; 返回结束迭代器 返回一个指向…

企业日常公关如何抵御负面信息的入侵?

如今&#xff0c;互联网时代信息传播速度极快&#xff0c;这使得宣传工作效率倍增&#xff0c;也给企业舆情管理带来一定的挑战。舆情优化搞得好&#xff0c;企业宣传工作事半功倍&#xff0c;网络舆论走向负面的话&#xff0c;则对宣传工作非常不利&#xff0c;会导致推广效果…

Echart 柱状图,X轴斜着展示

option { color: [‘#3398DB’], tooltip: { trigger: ‘axis’, axisPointer: { // 坐标轴指示器&#xff0c;坐标轴触发有效 type: ‘shadow’ // 默认为直线&#xff0c;可选为&#xff1a;‘line’ | ‘shadow’ } }, grid: { left: ‘3%’, right: ‘4%’, bottom: ‘3%’…

go-zero服务自动收集线上问题线上实战

前言 ​ 对于pprof&#xff0c;相信熟悉go语言的程序员基本都不陌生&#xff0c;一般线上的问题都是靠它可以快速定位。但是实际项目中&#xff0c;很多时候我们为了性能都不会开启它&#xff0c;但是出了问题又要靠它来分析。好在go-zero已经帮我们很好的集成进来了&#xff…

Leu-Trp-Leu-COOH,42293-99-2

编号: 122381中文名称: 三肽Leu-Trp-Leu英文名: Leu-Trp-LeuCAS号: 42293-99-2单字母: H2N-LWL-OH三字母: H2N-Leu-Trp-Leu-COOH氨基酸个数: 3分子式: C23H34N4O4平均分子量: 430.54精确分子量: 430.26等电点(PI): 6.11pH7.0时的净电荷数: -0.02平均亲水性: -2.3333333333333疏…

[附源码]计算机毕业设计springboot环境保护宣传网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Windows中睡眠和休眠的区别

休眠一般是笔记本电脑才有的功能&#xff0c;睡眠是几乎所有电脑都有 一、系统层面的理解 1.1 睡眠 睡眠状态下&#xff0c;电脑只会消耗很少的电量&#xff0c;电脑可更快启动&#xff0c;并且可以立即返回到离开的位置。因此&#xff0c;使用者不必担心由于电池电量耗尽而丢…

国外Essay写作怎么让内容丰富起来?

在国外大学&#xff0c;写Essay是很多课程常用的考核方式&#xff0c;这种形式也非常考察同学们的综合能力。但对于本身英语就是第二语言的我们&#xff0c;有时候会觉得困难&#xff0c;有时候拖到最后匆忙交上去一篇&#xff0c;当然没有办法得到好分数。今天我们就来看一看如…

后端存储实战课总结(上)

创建和更新订单 表设计 最少应该有以下几张表&#xff1a; 订单主表&#xff1a;保存订单基本信息订单商品表&#xff1a;保存订单中的商品信息订单支付表&#xff1a;保存订单支付和退款信息订单优惠表&#xff1a;保存订单的优惠信息 订单主表和字表是一对多关系&#xf…

android Framework 中用到了哪些跨进程通信方式?

文章目录Linux 有哪些跨进程的通信方式&#xff1f;管道本地 Socket共享内存信号Linux 有哪些跨进程的通信方式&#xff1f; Binder 机制是Android基于Linux的一种独特的IPC机制。我们常用的AMS&#xff0c;PMS 等都是通过Binder机制来完成跨进程通信的&#xff0c;那么除了Bin…

维格云连接功能日志入门教程

目录 维格云连接功能简介 维格云连接功能效果 涉及功能范围 注意事项 维格云连接功能简介 应用内「数据管理——概览」界面,新增了连接功能日志模块,便于查看连接功能的执行结果、排查问题。 维格云连接功能效果 鼠标移动至目标日志,点击“查看数据”可以跳转至对应数据…

求树的直径算法以及证明

以下为两次dfs&#xff08;bfs&#xff09;的做法以及正确性证明。 算法步骤 &#xff08;1&#xff09;任取树上一点S&#xff0c;以S为源点BFS得S到各个顶点的d值&#xff1b; &#xff08;2&#xff09;取d值最大者之一为P&#xff0c;再以P为源点BFS得P到各个顶点的d值&am…

Metabase学习教程:仪表盘-7

使用Metabase构建记录查找工具 如何使用Metabase构建内部查找工具来快速查找有关客户、订单或其他数据的详细信息。 我们写过人们使用Metabase的一些有趣的方式其中之一是使用Metabase作为内部或后台应用程序的解决方案&#xff0c;例如客户查找工具。您不必构建定制页面来查…

惠普笔记本重装系统后没有声音如何解决

​最近很多小伙伴又开始了网上冲浪的生活,但是电脑用久了难免会发生一些故障的问题,最近就有些小伙伴重装系统之后问小编自己的电脑没有声音的问题?不要慌?接下来小编教你惠普笔记本重装系统后没有声音的解决方法. 工具/原料&#xff1a; 系统版本&#xff1a;win7系统 型…

基于单片机技术的自动停车器的设计

目 录 摘 要 I Abstract II 1绪论 1 1.1课题研究背景 1 1.2国内外发展现状 1 1.3汽车自动停车器的研究目的 2 1.4课题研究的意义 2 2汽车停车器的功能设计 3 2.1汽车自动停车器的设计要求 3 2.2停车器的主要功能 3 3汽车自动停车器的硬件设计 5 3.1汽车自动停车器的硬件组成 5 …

简单的 JSONParser

最近在学习 Python 的正则表达式内容&#xff0c;我看的是官方的文档&#xff0c;在文档的最后有一个例子&#xff0c;勾起了我的兴趣。它是用正则表达式来制作了一个简单的词法分析器。我觉得这个东西非常有趣&#xff0c;以前在学校的时候&#xff0c;有一次作业我是手写的&a…