js闭包的必要条件及创建和消失(生命周期)

news2024/11/25 4:07:38

>创建闭包的必要条件:

1.函数嵌套

2.内部函数引用外部函数的变量

3.将内部函数作为返回值返回

>闭包是什么?

就是可以访问外部函数(作用域)中变量的内部函数

> 闭包是什么时候产生的?

- 当调用外部函数时,闭包就已经创建了

- 外部函数每调用一次就会产生一个闭包,

闭包和闭包之间是相互独立的

>闭包是怎么消失的?

- 直到内部函数被GC(垃圾回收)后才消失

function outer() {
      var n = 0;
      function inner() {
        n++;
        console.log('inner ->',n);
      }
      function inner2() {
        n++;
        console.log('inner2 ->',n)
      }
      // 将内部函数存储到一个对象中返回
      return {inner:inner,inner2:inner2};
    }
    var obj = outer();
    var obj2 = outer();
    console.log(obj); // 打印的是 {inner: ƒ inner(), inner2: ƒ inner2()}
    obj.inner();// 初次n++ 打印的是1
    obj.inner2();// 二次n++ 因为改变的是同一个变量 打印的是2

    // obj2是单独的函数调用,所以产生的闭包和obj之间是独立
    obj2.inner();// 初次n++ 打印的还是1
    obj2.inner2();// 二次n++ 因为改变的和obj2.inner()改变的是同一个变量 打印的是2
    
    console.log('outer',outer); // 打印的是 'outer',f outer(){}...
    var outer = null // 闭包消失
    console.log('outer',outer); // 打印的是 'outer',null

闭包在实际的项目中其实是无处不在的,可以算得上是前端工程师的必修课,在面试中也是会经常问到的,希望正在学习的小伙伴们可以熟练掌握。

>控制台数据显示效果:

欢迎关注我的原创文章:小伙伴们!我是一名热衷于前端开发的作者,致力于分享我的知识和经验,帮助其他学习前端的小伙伴们。在我的文章中,你将会找到大量关于前端开发的精彩内容。

学习前端技术是现代互联网时代中非常重要的一项技能。无论你是想成为一名专业的前端工程师,还是仅仅对前端开发感兴趣,我的文章将能为你提供宝贵的指导和知识。

在我的文章中,你将会学到如何使用HTML、CSS和JavaScript创建精美的网页。我将深入讲解每个语言的基础知识,并提供一些实用技巧和最佳实践。无论你是初学者还是有一定经验的开发者,我的文章都能够满足你的学习需求。

此外,我还会分享一些关于前端开发的最新动态和行业趋势。互联网技术在不断发展,新的框架和工具层出不穷。通过我的文章,你将会了解到最新的前端技术趋势,并了解如何应对这些变化。

我深知学习前端不易,因此我将尽力以简洁明了的方式解释复杂的概念,并提供一些易于理解的实例和案例。我希望我的文章能够帮助你更快地理解前端开发,并提升你的技能。

如果你想了解更多关于前端开发的内容,不妨关注我的原创文章。我会不定期更新,为你带来最新的前端技术和知识。感谢你的关注和支持,我们一起探讨交流技术共同进步,期待与你一同探索前端开发的奇妙世界!
 

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

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

相关文章

PPP/INS紧组合代码学习

前言: 本文是基于IGNAV的PPP/INS紧组合学习,在此之前需要具备GNSS/INS松组合知识,武汉大学的i2nav实验室的KF-GINS项目可以作为学习模板。可以参考这篇优秀博文,链接:KF-GINS源码阅读_李郑骁学导航的博客-CSDN博客 IG…

数据链路层——以太网协议、ARP协议

目录 以太网协议 以太网协议的简介 以太网协议所处的位置 以太网帧(或者说MAC帧)的格式 局域网通信原理 碰撞避免算法(包含MTU的知识点) 局域网攻击原理 ARP协议 ARP协议所在的位置 为什么要存在ARP协议(或者…

win10 下 mvn install 报错:编码GBK不可映射字符

问题背景 由于jenkins需要部署不同的项目,需要使用不同的jdk版本,所以需要配置单独的settings.xml,使用指定的jdk版本进行编译,这里需要单独的maven设置,在配置完后进行mvn的install的时候,由于存在中文注释…

文件操作利器:Python十大库全面解析

更多资料获取 📚 个人网站:ipengtao.com Python拥有多个库用于文件操作,提供了各种功能来管理、读取和写入文件。这些库覆盖了从基本的文件系统交互到高级的文件压缩和数据格式处理等多个方面。文件操作是编程中不可或缺的一部分&#xff0c…

【海思SS528 | VDEC】MPP媒体处理软件V5.0 | 视频解码模块——学习笔记

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

Golang开发之------ Beego框架

1.安装go(配置环境变量) 2.安装gorm(Goland编辑器举例): go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct 3.初始化项目(首先需要在工作目录新建bin文件夹,pkg文件…

[Python入门系列之十二]安装Jupyter notebook与代码运行

引言 Jupyter Notebook将代码、图片和文本完美结合在一起,为编程学习带来了前所未有的便捷性。本文旨在为初学者提供一个关于Jupyter Notebook的入门指南。 什么是Jupyter Notebook Jupyter Notebook是一个开源的Web应用程序,允许你创建和共享包含代码…

五、初识FreeRTOS之FreeRTOS的任务创建和删除

本节主要学习以下内容: 1,任务创建和删除的API函数(熟悉) 2,任务创建和删除(动态方法)(掌握) 3,任务创建和删除(静态方法)&#xf…

大数据之 Hadoop

hadoop主要解决:海量数据的存储和海量数据的分析计算 hadoop发展历史 Google是hadoop的思想之源(Google在大数据方面的三篇论文) 2006年3月,Map-reduce和Nutch Distributed File System(NDFS)分别被纳入到Hadoop项目&#xff0c…

计算机视觉:使用dlib实现人脸检测

1 dlib介绍 Dlib是一个广泛使用的开源库,在计算机视觉和机器学习领域具有重要影响。它是由Davis King在2002年开发,主要用C语言编写,但也提供了Python接口。Dlib结合了高效的算法和易用性,使其成为学术界和工业界的热门选择。 1.…

C++基础 -18-继承中类继承的区别

无论使用公有,保护,私有继承 都无法访问基类私有成员 在多级继承中 使用公有继承 派生的派生可以访问基类的公有,保护成员 在多级继承中 使用保护继承 派生的派生可以访问基类的公有,保护成员 在多级继承中 使用私有继承 派生的派…

车辆动力学 | 轮胎纵滑和侧滑下的简化模型

1、轮胎模型的定义: ——反应轮胎力学性能(所有侧向力、纵向力以及会正力矩等)与侧偏角和运动状态(滑转率和滑移率)关系的数学模型 2、四个组成部分 胎面层、带束层、胎体、轮辋 3、简化模型的假设条件 4、起滑点&am…

电脑微信多开怎么操作?电脑微信多开bat代码

电脑微信多开怎么操作? 方法一:电脑微信多开bat代码方法二 微信是我们日常使用率很高的社交软件,在工作中因工作需要可能会用到两个微信号,如果是只登录一个微信,另外一个微信的聊天信息很容易漏看,这时候微…

<Linux>冯诺依曼体系结构||操作系统||系统调用于用户操作接口

前言:本文从软硬件角度计算机解释软硬件结构 硬件—冯诺依曼体系结构 软件—操作系统 文章目录 冯诺依曼计算机体系结构背景理解举例 操作系统(OS)OS的管理为什么要有操作系统? 系统调用与用户操作接口系统调用用户操作接口引入:printf&&scanf的重新理解库函数 计算机…

力扣 41 42.接雨水问题详细讲解,保证看完必会接雨水问题!!!时间复杂度最优解 o(n)

首先来个开胃小菜,41.缺少最小整数(难度:困难)真实感觉像是个简单级别 41. 缺失的第一个正数 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额…

干货:机器学习之线性代码基础

资料地址:https://machine-learning-from-scratch.rea 线性代数 0. 要点汇总1. 向量 Vector 1.1 向量是什么1.2 向量的运算 1.2.1 向量的加法1.2.2 向量的数乘 2. 线性组合、张成的空间与基 Linear Combination, Span and Basis 2.1 运算封闭2.2 线性组合2.2 向量…

Android进阶之路 - TextView文本渐变

那天做需求的时候,遇到一个小功能,建立在前人栽树,后人乘凉的情况下,仅用片刻就写完了;说来惭愧,我以前并未写过文本渐变的需求,脑中也仅有一个shape渐变带来的大概思路,回头来看想着…

Proteus的网络标号与总线

Proteus为了减少过多、复杂的连线,可以使用网络标号与总线配合使用。 Proteus的导线上添加了网络标号,意味着在Proteus上相同的网络标号是连在一起的,所说在图纸上看不出来。 如下图是比较好的Proteus中使用总线的绘制的图纸。可以效仿着画…

【坤坤之夜 KUNKUNNIGHT】- 探索神秘世界,开启刺激冒险之旅!

你是否准备好迎接一个充满挑战和惊喜的单机游戏体验?坤坤之夜(KUNKUNNIGHT)将带你进入一个神秘而刺激的世界,让你尽情探索,解锁各种有趣的技能和道具,解决谜题,完成各种挑战。 坤坤之夜的游戏画…

CodeMeter软件保护及授权管理解决方案(二)

客户端管理工具 CodeMeter Runtime是CodeMeter解决方案中的重要组成部分,其为独立软件包,开发者需要把CodeMeter Runtime和加密后的软件一起发布。CodeMeter Runtim包括以下组件用于实现授权的使用: CodeMeter License Server授权服务器 Co…