闭包

闭包

1、什么是闭包:闭包就是能够读取其他函数内部变量的函数;例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“;

2、为什么需要闭包:这是因为js中的作用域,使得函数内部可以直接访问全局变量(即向上查找作用域链),函数外部不能访问函数内部的局部变量,但是有时候我们会需要使用函数内部的局部变量,这就产生了闭包;

3、闭包的作用
(1)可以读取函数内部的变量,保护函数内的变量安全;(因为只有嵌套函数才能访问外层函数内的局部变量,而无法通过其他途径访问到,因此保护了局部变量的安全性)

(2)让这些变量的值始终保持在内存中;(每次调用函数时,都会为之创建一个新的对象(活动对象Active 0bject:是看不见的)用来保存局部变量,把这个对象添加至作用域链中)

4、实例

function a(){
	var i=0;
    function b(){
    	alert(++i);
    }
    return b;
}
var c=a();

(1)闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。

(2)由于闭包的存在使得函数a返回后,a中的i始终存在,这样每次执行c(),i都是自加1后alert出i的值。

(3)如果a返回的不是函数b,情况就完全不同了。因为a执行完后,b没有被返回给a的外界,只是被a所引用,而此时a也只会被b引 用,因此函数a和b互相引用但又不被外界打扰(被外界引用),函数a和b就会被回收。

5、使用闭包的注意点
(1)闭包的缺点就是常驻内存会增大内存使用量,并且使用不当很容易造成内存泄露。

(2)如果不是因为某些特殊任务而需要闭包,在没有必要的情况下,在其它函数中创建函数是不明智的,因为闭包对脚本性能具有负面影响,包括处理速度和内存消耗。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值