博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何理解JS中的闭包及其优缺点
阅读量:4131 次
发布时间:2019-05-25

本文共 1165 字,大约阅读时间需要 3 分钟。

答案:

简单理解就是函数中嵌套函数。我们都知道局部变量我们是无法访问的,但是通过闭包可以做到。

// 正常访问var lan = 'zh';function hello(){  var name = '前端';}console.log(name) //很明显'undefined'// 换成闭包function hello(){    var name = '前端';    function demo(){      console.log(name) //打印:前端    }}

 

详细解析:

Javascript 在函数外部自然无法读取函数内的局部变量。

function f1() {    var n=999;}alert(n); // error

需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,实际上声明了一个全局变量!

 

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

理解闭包的关键在于:外部函数调用之后其变量对象本应该被销毁,但闭包的存在使我们仍然可以访问外部函数的变量对象,这就是闭包的重要概念。

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

 

闭包的优缺点

优点(闭包的作用):

  • ① 在函数执行完后,函数内部的变量一直存在于内存中,不会在调用结束后被垃圾回收机制回收;

  • ② 函数外部也可以读取到函数内部的变量;

缺点:

由于闭包会使用函数中的变量存在在内存中,内存消耗很大,所以不能滥用闭包

解决的办法是:退出函数之前,将不使用的局部变量删除

 

闭包常常用来「间接访问一个变量」。换句话说,「隐藏一个变量」,实现私有化。依据软件设计中的最小特权原则,应该最小限度的暴露必要内容,而将其他内容都隐藏起来。在编写面向对象的JS代码中,是无法使用传统的私有变量的,即无法让对象的属性保持对外隐藏。但是通过使用闭包就可以创建私有变量。

在这个例子中,不能直接访问私有变量counter,只能通过存取的方式获取私有变量的值。

function MyConstructor(){    var counter = 0;    this.getCounter = function(){        return counter;    }    this.addCounter = function(){        counter++;    }}var myConstructor = new MyConstructor();myConstructor.addCounter();console.log(myConstructor.getCounter()); //1console.log(myConstructor.counter);      //underfined

 

转载地址:http://jjuvi.baihongyu.com/

你可能感兴趣的文章
pytorch
查看>>
pytorch(三)
查看>>
ubuntu相关
查看>>
C++ 调用json
查看>>
nano中设置脚本开机自启动
查看>>
动态库调动态库
查看>>
Kubernetes集群搭建之CNI-Flanneld部署篇
查看>>
k8s web终端连接工具
查看>>
手绘VS码绘(一):静态图绘制(码绘使用P5.js)
查看>>
手绘VS码绘(二):动态图绘制(码绘使用Processing)
查看>>
基于P5.js的“绘画系统”
查看>>
《达芬奇的人生密码》观后感
查看>>
论文翻译:《一个包容性设计的具体例子:聋人导向可访问性》
查看>>
基于“分形”编写的交互应用
查看>>
《融入动画技术的交互应用》主题博文推荐
查看>>
链睿和家乐福合作推出下一代零售业隐私保护技术
查看>>
Unifrax宣布新建SiFAB™生产线
查看>>
艾默生纪念谷轮™在空调和制冷领域的百年创新成就
查看>>
NEXO代币持有者获得20,428,359.89美元股息
查看>>
Piper Sandler为EverArc收购Perimeter Solutions提供咨询服务
查看>>