怎么理解JavaScript闭包函数

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

本文介绍了“如何理解JavaScript闭包函数”的知识。很多人在实际案例操作中都会遇到这样的困难。接下来,让边肖带领大家学习如何应对这些情况!希望大家认真阅读,学点东西!

变量作用域

要理解JavaScript闭包,首先要了解JavaScript的变量范围。

变量有两种范围:全局和局部(全局变量和局部变量)。

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

varn=10

function fn(){ 0

警报(n)

}

Fn()//10,函数内部的变量不能在函数外部读取。

function fn(){ 0

varn=10

}

fn()

alert(n)//ni not defined函数无法读取函数的内部n。注意:当变量在函数内部由var声明时,该变量是局部变量,如果不使用var,则它是全局变量。

例如:

function fn(){ 0

n=10

}

fn()

Alert(n)//10另外,函数的参数是局部的,只在函数内部起作用。

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

function f1(){ 0

varn=10

function F2(){ 0

警报(n)

}

}f2函数可以得到f1函数中的所有局部变量,但f1函数无法得到f2函数——JavaScript语言中局部变量的唯一“链式作用域”结构。(也就是说,子对象将逐级查找父对象的所有变量),因此父对象的所有变量对于子对象都是可见的。

f2函数可以得到父函数f1的局部变量,所以如果返回F2()函数,f1()函数内部的变量可以在f1函数外部访问。

例如:

function f1(){ 0

varn=10

function F2(){ 0

警报(n)

}

returnf2()

}

f1()//页面弹出10个例子中的f2()函数是一个闭包函数。

00-1010因为作用域的关系,我们无法访问函数外的函数中定义的变量,但是我们对某些东西有这种需求,于是闭包的概念就出现了。

闭包函数是一个可以访问另一个函数范围内的变量的函数。

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

本质上,闭包是连接一个函数内部和外部的桥梁。

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

闭包的概念

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

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

00-1010闭包可以将函数中的变量保存到内存中,垃圾收集机制不清理,内存消耗高,所以闭包不能被滥用,否则可能会发生内存泄漏。

补充:

什么是内存泄漏?

所有程序都需要内存才能运行。只要需要内存,操作系统就必须提供内存。

当应用程序中的一些代码变量不再需要内存,但没有被操作系统或可用内存池回收时,这意味着它存在内存泄漏。

也就是说,当不再需要某一块内存时,这块内存中仍然存在——内存泄漏。

解决闭包带来的内存泄漏问题;

退出函数之前,删除所有未使用的局部变量。

例如,将当前变量的值设置为“null”。当垃圾收集机制启动时,这些具有“null”值的变量将被自动收集。

闭包的用途

好处

(1)保护函数中变量的安全性,实现封装,防止变量流入其他环境产生命名冲突。

在内存中维护一个变量,可以作为缓存使用(但使用过多也是缺点,会消耗内存)

匿名自执行功能可以减少内存消耗。

坏处

(1)上面已经反映了其中一点,就是引用的私有变量不能销毁,增加了内存消耗,导致内存泄漏。解决方法是手动分配一个null值;使用该变量后将其转换为;

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

这里介绍一下“如何理解JavaScript闭包函数”的内容。感谢您的阅读。如果你想了解更多行业,关注网站,边肖将为大家输出更多高质量的实用文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/77889.html

(0)

相关推荐

  • 心形线,求心形函数表达式~~~

    技术心形线,求心形函数表达式~~~1.直角坐标方程心形线的平面直角坐标系方程表达式分别为 心形线:
    x^2+y^2+a*x=a*sqrt(x^2+y^2)
    x^2+y^2-a*x=a*sqrt(x^2+y^2)
    2.极坐

    生活 2021年10月29日
  • 高铁一等座和二等座的区别,一等座二等座是高铁还是火车

    技术高铁一等座和二等座的区别,一等座二等座是高铁还是火车高铁一等座和二等座的区别主要是在舒适性、设备配置方面,还有票价方面不同高铁一等座和二等座的区别。1、一等座和二等座首先是坐席不同,高铁一等座四个人一排,每座下面都有

    生活 2021年10月29日
  • jquery trim方法能去除哪些符号

    技术jquery trim方法能去除哪些符号这篇文章主要介绍“jquery trim方法能去除哪些符号”,在日常操作中,相信很多人在jquery trim方法能去除哪些符号问题上存在疑惑,小编查阅了各式资料,整理出简单好

    攻略 2021年11月15日
  • 微服务设计的方法是什么

    技术微服务设计的方法是什么这篇文章主要讲解了“微服务设计的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微服务设计的方法是什么”吧!一、微服务架构理论1.六边形

    攻略 2021年11月16日
  • wcf并发模式与实例模式(wcf大量数据缓存)

    技术WCF缓存机制怎么理解这篇文章主要讲解了“WCF缓存机制怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WCF缓存机制怎么理解”吧!缓存是很占内存的,缓存也有它

    攻略 2021年12月14日
  • 免费刷粉网站推广,抖音怎么增加粉丝量?

    技术免费刷粉网站推广,抖音怎么增加粉丝量?免费刷粉网站推广,抖音怎么增加粉丝量?抖音视频一直都是很受大家欢迎的一个社交软件,不仅仅是刷抖音看作品,也有很多人在抖音上拍摄作品分享。分享抖音作品就得有点赞双击量,这样才能有人

    测评 2021年11月11日