闭包--循序学习

简介: 感觉似懂非懂的概念,这里记录理解进程。 1.javascript的闭包 参考:百度百科。 什么是闭包 “官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

感觉似懂非懂的概念,这里记录理解进程。

1.javascript的闭包

参考:百度百科

什么是闭包
“官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
相信很少有人能直接看懂这句话,因为他描述的太学术。我想用如何在Javascript中创建一个闭包来告诉你什么是闭包,因为跳过闭包的创建过程直接理解闭包的定义是非常困难的。看下面这段

代码

1
2
3
4
5
6
7
8
9
function  a(){
var  i=0;
function  b(){
alert(++i);
}
return  b;
}
var  c=a();
c();

特点

这段代码有两个特点:
1、函数b嵌套在函数a内部;
2、函数a返回函数b。
这样在执行完var c=a( )后,变量c实际上是指向了函数b,再执行c( )后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:
当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。

作用

简而言之,闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制 GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。这是对闭包作用的非常直白的描述,不专业也不严谨,但大概意思就是这样,理解闭包需要循序渐进的过程。
在上面的例子中,由于闭包的存在使得函数a返回后,a中的i始终存在,这样每次执行c(),i都是自加1后alert出i的值。
那 么我们来想象另一种情况,如果a返回的不是函数b,情况就完全不同了。因为a执行完后,b没有被返回给a的外界,只是被a所引用,而此时a也只会被b引 用,因此函数a和b互相引用但又不被外界打扰(被外界引用),函数a和b就会被 GC回收。(关于Javascript的垃圾回收机制将在后面详细介绍)




唯有不断学习方能改变! -- Ryan Miao
目录
相关文章
|
10月前
|
存储 智能硬件
CPU的定义与功能与架构
CPU(中央处理器)是计算机的核心部件,负责执行程序指令、控制数据传输和进行运算。它能处理算术与逻辑运算,并协调其他硬件协同工作。x86架构源于英特尔,适用于PC和服务器,采用复杂指令集;ARM架构则由Acorn等公司开发,广泛用于移动设备和嵌入式系统,采用精简指令集,功耗低且能效比高。
1322 5
|
7月前
|
存储 人工智能 网络协议
为什么NAS需要内网穿透,如何给自建NAS做内网穿透
内网穿透是一种解决外网访问内网服务的技术,通过公网服务器中转或直连方式,实现对家中的NAS、摄像头等设备的远程访问。文章详细介绍了内网与外网的区别、NAS为何需要内网穿透,以及两种主要实现方式:端口转发和P2P直连。同时列举了常见工具如NAT123、FRP、Ngrok和Infortress,分别适合不同技术基础的用户。总结指出,内网穿透让远程访问变得便捷,而相关工具则降低了使用门槛,让更多人受益于这项技术。
|
存储 固态存储 数据管理
1t固态硬盘为什么不建议分区
随着技术进步,1TB固态硬盘(SSD)成为升级存储的首选。SSD因其快速读写和耐用性正替代传统机械硬盘(HDD)。本文探讨为何不建议为1TB SSD分区:了解SSD与HDD工作原理差异至关重要;分区可能增加磨损、降低性能并使管理复杂化;然而,分区有助于数据安全与管理。若决定分区,教程提供了无损拆分方法。最终,分区决策取决于个人使用习惯,重要的是做好数据备份。
1t固态硬盘为什么不建议分区
|
自然语言处理 算法 搜索推荐
NLP中TF-IDF算法
TF-IDF(词频-逆文档频率)是一种用于信息检索与数据挖掘的加权技术,通过评估词语在文档中的重要性来过滤常见词语,保留关键信息。本文介绍了TF-IDF的基本概念、公式及其在Python、NLTK、Sklearn和jieba中的实现方法,并讨论了其优缺点。TF-IWF是TF-IDF的优化版本,通过改进权重计算提高精度。
1179 1
|
10月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】自关联外键插入数据时报错:YAS-02033 foreign key constraint violated parent key n
在YashanDB中,创建自关联外键表后,插入互相关联的两行数据时失败。原因是YashanDB在处理此类完整性约束时,未在事务级统一判断,而是逐行检查,导致符合外键关系的数据无法插入。此问题影响所有版本,已在Oracle中验证可正常执行。规避方法为禁用外键约束。通过构造相同SQL语句对比分析,确认了问题根源在于idxCheckKeyExist方法的实现差异。
|
机器学习/深度学习 存储 人工智能
ACL 2024|D2LLM:将Causal LLM改造成向量搜索模型的黑科技
D2LLM:一种针对语义搜索任务的新颖方法,它结合了大语言模型(LLM)的准确性与双编码器的高效性。实验表明,D2LLM在多项任务上的性能超越了五个领先基准模型,尤其是在自然语言推理任务中,相对于最佳基准模型的提升达到了6.45%
367 1
|
存储 大数据 Serverless
大数据增加分区优化资源使用
大数据增加分区优化资源使用
239 1
|
机器学习/深度学习 人工智能 自然语言处理
服务行业自动化
服务行业自动化
348 1
|
Ubuntu Linux C语言
【操作系统原理】—— 信号量与PV操作实现
【操作系统原理】—— 信号量与PV操作实现
1148 0
|
算法 安全 UED
探索操作系统的内核空间:虚拟内存管理
【7月更文挑战第50天】 在现代操作系统中,虚拟内存管理是核心功能之一,它允许操作系统高效地使用物理内存,并为应用程序提供独立的地址空间。本文将深入探讨操作系统虚拟内存管理的机制,包括分页、分段以及内存交换等关键技术,并分析它们如何共同作用以实现内存的有效管理和保护。通过理解这些原理,读者可以更好地把握操作系统的内部工作原理及其对应用程序性能的影响。

热门文章

最新文章