什么是闭包

什么是闭包?简单来说就是,有一个外层函数a,并且函数a中还有个内层函数b,函数a中有个定义变量aa,这个变量aa按理来说应该在函数a执行完,就会被内存销毁,但是在函数a中的函数b,不仅用到了外层函数中的变量aa,而且还return了aa,把变量aa返回到了一个全局的状态下,这就叫做闭包

function a(){
	var aa='i am a';
	return function(){
		return aa;
	}
}
var A=a();  		//   此时A就是方法a的return 也就是  function(){return aa;}  ,自行体会一下
console.log(A());     //   i am a

那么有人就要问了,这么闭包有什么好处,感觉花里胡哨的还麻烦,为什么要返回值不直接return 回去?
所以下面就要说闭包的优点了:
1.闭包可以读取函数的内部变量,这个不用我说都知道,这样可以保护私有的变量,你想要展现出的可以访问到的变量就放到return里的函数中,这样函数内部的变量只能通过return 里的函数才能访问到,提高了安全性
2.闭包可以保存内部变量在内存中,而不让垃圾处理机制给清空,代码如下

	function a() {
				var aa =1;
				return function (){
				aa++;					//对aa进行加法运算
				return aa;
				}
	}
	var A=a();
	console.log(A());		//运行了一次,打印出aa为2
	console.log(A());		// 再次运行,打印出aa为3

由上述代码可见,在第一次运行A时,对内部的aa进行加法运算后,aa变量进行了保存并没有销毁,所以在第二次打印A()的时候才能打印出3。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
闭包是指在一个函数内部定义的函数,并且内部函数可以访问外部函数的变量。闭包传递的是变量,而装饰器传递的是函数,除此之外没有任何区别,或者说装饰器是闭包的一种,它只是传递函数的闭包。\[1\]闭包可以通过查看函数的属性__closure__来确定是否是闭包,如果一个函数是闭包,那么查看该属性将会返回一个cell对象组成的tuple对象。\[2\]在Python中,闭包可以用来实现一些特定的功能,比如计数器。通过在一个函数内部定义一个变量,并在内部函数中对该变量进行操作,可以实现对变量的持久化。\[3\] #### 引用[.reference_title] - *1* [python闭包理解](https://blog.csdn.net/cangqiongxiaoye/article/details/126721853)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [在Python中什么是闭包?能做什么?](https://blog.csdn.net/qdPython/article/details/126161036)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [python---闭包](https://blog.csdn.net/zzh_love/article/details/129007703)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值