博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js 中的闭包浅谈
阅读量:5796 次
发布时间:2019-06-18

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

hot3.png

js 中的闭包浅谈

1.闭包的概念?

从结构上来说:函数内部的函数,形成了嵌套就称为闭包;从闭包的作用来说:能够访问一个函数内部的变量的函数称为闭包

2.变量作用域

要理解闭包,首先要理解javascript的特殊的变量作用域。

变量的作用域无非就两种:全局变量和局部变量。

javascript语言的特别之处就在于:函数内部可以直接读取全局变量,但是在函数外部无法读取函数内部的局部变量。

注意点:在函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明的是一个全局变量----实际上应该为隐式全局变量,也是全局变量。

3.示例

先上段代码://函数a function a() { 	var i=0; 	//函数b function b() { 	alert(++i); } 	return b; } //函数c var c = a(); c();

代码特点: 1、函数b嵌套在函数a内部; 2、函数a返回函数b。

代码中函数a的内部函数b,被函数a外面的一个变量c引用的时候,这就叫创建了一个闭包。有时候函数b也可以用一个匿名函数代替来返回,即return function(){};

优点:

1.保护函数内的变量安全,加强了封装性

2.在内存中维持一个变量(用的太多就变成了缺点,占内存)

闭包之所以会占用资源是当函数a执行结束后, 变量i不会因为函数a的结束而销毁, 因为b的执行需要依赖a中的变量。

4.不适合场景

返回闭包的函数是个非常大的函数,会造成代码的臃肿的现象。

5.闭包之jquery

闭包是javascript语言的一大特点,主要应用闭包场合主要是为了:设计私有的方法和变量。 这在做框架的时候体现更明显,有些方法和属性只是运算逻辑过程中的使用的,不想让外部修改这些属性,因此就可以设计一个闭包来只提供方法获取。

6.闭包优缺点总结

优点:

  1. 逻辑连续,当闭包作为另一个函数调用的参数时,避免你脱离当前逻辑而单独编写额外逻辑。
  2. 方便调用上下文的局部变量。
  3. 加强封装性,第2点的延伸,可以达到对变量的保护作用。

缺点: 闭包的缺点就是常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。浪费不仅仅因为它常驻内存,更重要的是,对闭包的使用不当会造成无效内存的产生

闭包中的变量为什么会常驻于内存当中? 因为返回了一个内部引用,这个内部引用又引用了变量,所以变量在内存中,不会被GC回收;

内存泄漏:是指我们已经无法再通过js代码来引用到某个对象,但垃圾回收器却认为这个对象还在被引用,因此在回收的时候不会释放它。导致了分配的这块内存永远也无法被释放出来。如果这样的情况越来越多,会导致内存不够用而系统崩溃。

转载于:https://my.oschina.net/shuaihong/blog/1551377

你可能感兴趣的文章
测试人员的GitHub
查看>>
Spring Web Services 3.0.4.RELEASE和2.4.3.RELEASE发布
查看>>
有关GitHub仓库分支的几个问题
查看>>
无服务器计算的黑暗面:程序移植没那么容易
查看>>
云原生的浪潮下,为什么运维人员适合学习Go语言?
查看>>
Webpack入门教程三十
查看>>
EAServer 6.1 .NET Client Support
查看>>
锐捷交换机密码恢复(1)
查看>>
Kali linux virtualbox rc=1908 错误解决办法
查看>>
Erlang学习总结之Erlang语法中的逗号(,)、分号(;),句号(.)的正确用法...
查看>>
linux软件包管理之三(源代码安装)
查看>>
数据库三范式是什么?
查看>>
[转载]设置Ubuntu自动连接无线,无须再输入密钥环和无线密码
查看>>
SQL Server 2014 许可证(三)各版本的许可证
查看>>
九叔Xen App测试报告
查看>>
Apache配置
查看>>
Ext gridPanel 单元格数据的渲染
查看>>
Android SDK 的下载代理
查看>>
Method Swizzling对Method的要求
查看>>
佛祖保佑,永不宕机
查看>>