千家信息网

怎么理解JavaScript闭包函数

发表于:2024-10-26 作者:千家信息网编辑
千家信息网最后更新 2024年10月26日,本篇内容介绍了"怎么理解JavaScript闭包函数"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!变
千家信息网最后更新 2024年10月26日怎么理解JavaScript闭包函数

本篇内容介绍了"怎么理解JavaScript闭包函数"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

变量作用域

要理解JavaScript闭包,就要先理解JavaScript的变量作用域。

变量的作用域有两种:全局的和局部的(全局变量和局部变量)

JavaScript中,在函数内部可以直接读取到全局变量。

var n=10function fn(){        alert(n)}fn()      //10

而在函数外部无法读取到函数内部的变量。

function fn(){        var n=10;}fn()alert(n)   //n is not defined    函数外部无法读取到函数内部的n

注意:函数内部使用var声明变量的时候,这个变量是局部变量,如果不使用var,那么这个变量就是一个全局变量。

例如:

function fn(){        n=10;}fn()alert(n)   //10

另外,函数的参数也是局部性的,只在函数内部起作用。

在正常情况下,我们是无法得到函数内部的局部变量的,只有变通方法才可以--在函数内部再声明一个函数。

function f1(){        var n=10;        function f2(){                alert(n)        }}

f2函数可以得到f1函数内的所有局部变量,但是f1函数却无法得到f2函数内部的局部变量--JavaScript语言特有的"链式作用域"结构。(即子对象会一级一级地向上寻找所有父对象的变量),所以,父对象的所有变量,对于子对象都是可见的。

f2函数可以获取到父级函数f1的局部变量,那么如果把f2()函数返回,在函数f1外部就可以访问到f1()函数内部的变量了。

例如:

function f1(){        var n=10;        function f2(){                alert(n)        }        return f2()}f1()           //页面弹出10

例子中的f2()函数就是一个闭包函数。

闭包的概念

由于作用域原因,我们无法在函数外访问函数里面定义的变量,但有事我们又有这个需求,因此就出现了闭包的概念。

闭包是指有权访问另一个函数作用域中的变量的函数。

在上面的例子中,内部函数f2就是一个闭包函数。

在本质上,闭包就是将函数内部和函数外部连接起来的桥梁。

闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰。

闭包的用途

(1)可以读取父级作用域函数内部的变量;

(2)让变量的值始终保存在内存中(让局部变量变成全局变量),不被垃圾回收机制清除。

闭包的缺点

由于闭包会使函数中的变量都保存到内存中,垃圾回收机制不清理,内存消耗很大,所以不能滥用闭包,否则可能导致内存泄漏。

补充:

什么是内存泄漏?

程序的运行都是需要内存的。只要对内存提出要求,操作系统必须供给内存。
当应用程序中的一些代码变量不再需要用到内存时,但是没有被操作系统或者可用内存池回收,就说明它发生了内存泄漏。

即,当已经不再需要某块内存时,这块内存还存在着--内存泄漏

解决闭包引起的内存泄漏的问题:

在退出函数之前,将不使用的局部变量全部删除。

例如:将当前变量的值设置为'null',当垃圾回收机制启动时,会自动对这些值为'null'的变量回收。

最后总结一下闭包的好处与坏处

好处

①保护函数内的变量安全 ,实现封装,防止变量流入其他环境发生命名冲突

②在内存中维持一个变量,可以做缓存(但使用多了同时也是一项缺点,消耗内存)

③匿名自执行函数可以减少内存消耗

坏处

①其中一点上面已经有体现了,就是被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏,解决方法是可以在使用完变量后手动为它赋值为null;

②其次由于闭包涉及跨域访问,所以会导致性能损失,我们可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响

"怎么理解JavaScript闭包函数"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

变量 函数 内存 闭包 局部 作用 全局 就是 对象 机制 消耗 私有 垃圾 保护 操作系统 例子 内容 坏处 好处 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 万户网络技术总部北京 如何查看电脑服务器的主机名 网络安全法对网络匿名的定义 一站式网络技术推广口碑推荐 网络安全法》第四十一 普陀区常规软件开发定制平均价格 数据库应用技术的课后题答案 数据库原理与应用第三版王秀英 oracle 创建数据库 网络安全部门缩写 软件开发作品的项目实施方案 数据库报告改进 上海猫霸网络技术有限公司 软件开发实训课设报告 特岗教师服务器未满考公务员 软件开发中的核心技术是什么 惟德知行互联网科技有限公司 数据库 大学 崇明涉密信息系统集成软件开发 结构生物学的数据库EMDB 华为服务器如何启动安全模式 数据库怎么分析股票 我的世界如何在服务器上开材质包 国家计算网络安全中心 软件开发完整步骤 数据库SAM文件在哪里 mir200物品数据库 ug怎么重新设置许可证服务器 网络安全科任职条件及资料 网络安全进校园的主题班会
0