闭包-详解

概念:

闭包就是能够读取其他函数内部变量得函数。简单的说就是定义在一个函数内部得函数

了解闭包之前,首先需要知道局部变量和全局变量在内存中得存储情况。

  • 全局变量:会一直保存在内存中,不会销毁,除非跳转或关闭当前页面。
  • 局部变量:函数调用时,写入内存,调用结束后,局部变量会 在内存中销毁。

闭包示例代码如下:

function f1(){
		let a  = 10;
		function f2(){
			a++
			return a
		}		
		return f2  
	}
	
	let f3 = f1()
	console.log(f3())  // 11
	console.log(f3())  // 12
	console.log(f3())  // 13

上图代码为闭包结构
为什么每次调用f3() 结果都会 +1 呢? 上面执行结果类似如下:
使a 变量成为了全局变量 所以类似如下效果代码 :

	let a  = 10;
	function f2(){
		a++
		return a
	}		
  f2()  // 11
  f2()  // 12
  f2()  // 13

而下方代码 则不同于上面代码:

function fn1(){
		let a = 10;
		a++
		return a
	}
 fn1()   // 11
 fn1()   // 11
 fn1()   // 11

a 属于局部变量,函数调用时,写入内存,函数调用完,内存中销毁该局部变量,所以每次调用都相当于从新写入变量,故每次得值都一样,不会累加。

综上所述闭包得优缺点:
优点:避免变量全局污染,
缺点:造成内存溢出,因为除非跳转页面或关掉页面,否则闭包变量内存不会销毁

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值