理解闭包及函数执行空间

个人理解

  1. 闭包 在函数内部return一个新函数,这个新函数就是闭包;
  2. 将一个全局变量放置在一个函数内,将其变成一个局部变量,这样做变量不会被函数外的程序执行操作;
    • 这样做可以保护全局变量的安全;
    • 防止全局变量污染;
    • 想要在函数外调用这个变量,就需要通过闭包的语法形式来执行调用;

执行空间

  1. 定义好的函数以字符串形式储存在堆中,调用函数时 会将代码复制到函数执行空间,函数执行完毕之后,执行空间立即销毁;所以我们想要在函数外部调用函数内部的变量,需要让这个执行空间不被销毁;
  2. 让执行空间不被销毁需要满足两个条件:
    • 函数返回值必须是引用数据类型
    • 必须有一个变量接收函数的返回值结果,也就是将函数的返回值(引用数据类型的内存地址)存储

闭包原理

  1. 在closure函数内定义变量,并且closure函数的返回值是另一个函数

  2. closure函数返回值的函数中 可以操作执行closure函数中 定义的变量

    • tip: 因为闭包函数返回的是个引用数据类型,并且储存在了一个变量中,也就是时刻在占用闭包函数的执行结果,所以闭包函数的函数执行空间不会被销毁,只有函数执行空间不被销毁,才能在函数外部调用函数内部的变量
  3. 在closure函数外面有变量存储 closure函数的返回值,也就是存储返回的函数的内存地址

示例

// 定义函数closure
function closure(){
	// 函数closure内定义的变量num
	var num = 100;
	// 返回值是一个函数
	return function (){
		// 返回的函数对num变量进行了操作
		return num+=100;
	}
}
// 函数closure之外有一个变量res存储函数closure的返回值(也是一个函数)的内存地址
const res = closure();
// 执行调用函数closure的返回值内函数,就是调用函数closure内的变量num
const result = res();
console.log(result);

示例函数执行时内存空间

内存中专门开辟出来的执行函数的空间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值