博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分析javascript关闭
阅读量:6080 次
发布时间:2019-06-20

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

1.什么是闭包

1)官方解释

一个拥有多个变量和绑定了这些变量的环境的表达式(一般是一个函数)。因而这些变量也是该表达式的一部分。

我的理解:所谓的闭包就是连接函数内部和函数外部的一座桥梁。使得在外部也可以訪问到函数内部的变量。

2)闭包的特点

A:作为一个函数变量的一个引用,当函数返回时,其处于激活状态。

B:一个闭包就是当一个函数返回时,一个没有释放资源的栈区。

 

2.闭包的用途

A:读取函数内部变量

function People(name) {            var name ="张三";            return function () {                alert(name);            }        }        var Job = new People();        Job();

解释:正如上述的代码所看到的,name是定义在People中的函数,是函数People中的局部变量,而我们在外部是无法訪问到的,可是People函数返回了一个内部函数,而这个内部函数是对变量name的一个引用,这就形成了一个闭包,所以在外部也能够訪问到People函数的内部变量(特点一);正如上述代码所看到的,假设name在函数People调用完后不能再訪问的话,则将被释放。而在本例中却被还有一个函数所返回,所以还会包括在栈中(特点二)。

B:保存变量始终在内存中

这也是闭包的不利处之所在地,由于闭包会使得函数中的变量保存在内存中,内存消耗非常大,所以不能滥用闭包。否则会造成网页载入缓慢问题等,解决办法就是在退出函数之前,来销毁不使用的局部变量。

 

3.思考题

1)样例1

function Test1() {            var a = 0;            function Test2() {                a++;                alert(a);            }        }        Test2();//是错误的。作用域在Test1,外部无法訪问到

2)改动后

function Test1() {            var a = 0;            function Test2() {                a++;                alert(a);            }            return Test2; //改动操作例如以下        }        var obj = Test1();        obj();//返回1        obj();//返回2          var obj2 = Test1();        obj2();//返回1        obj2();//返回2

4.小结

以上就是对闭包的所有理解。简单的一句话:闭包就是搭建外部函数与内部函数的桥梁。

上述仅仅是对闭包的一点点了解。有疑问之处,还请多多指正。



版权声明:本文博客原创文章,博客,未经同意,不得转载。

你可能感兴趣的文章
求算符文法的FIRSTVT集的算法
查看>>
一个诡异的取平方函数
查看>>
最近困扰我的问题, 关于写动画
查看>>
hexo常用命令笔记
查看>>
ios 添加到cell 上的button点击无效!扩大button的点击区域(黑魔法)
查看>>
2018 年最值得关注的 JavaScript 趋势
查看>>
WinSCP 5.13.9 发布,Windows 图形化 SFTP 客户端
查看>>
CentOS 7 Root用户密码重置 2017-04-02
查看>>
webservice(二)简单实例
查看>>
C# 注册表Regedit读写
查看>>
计算机类 | SCI期刊专刊截稿信息7条
查看>>
python——序列 & 集合 & 映射
查看>>
搞全闪存阵列的各执一词 宏杉说别吵了,就用我哒
查看>>
玩转搭载眼球追踪的FOVE 0,需要多高的配置呢?
查看>>
vue-router 源码:前端路由
查看>>
Flask下载文件
查看>>
java基础学习_基础语法(上)02_day03总结
查看>>
乐视印度公司裁员80%,全球化扩张遭遇滑铁卢,它还能撑多久?
查看>>
weex sdk集成到Android工程二. weex sdk集成到Android工程
查看>>
Git工程实践(二)多账号配置
查看>>