学习并深入理解闭包

前言

学习闭包前,先学点别的。

程序执行时:
1.编译阶段
创建变量对象GO,包括变量和函数作用域装在一块内存中。但是没有赋值,变量都是undefined,函数:0xxx

2.创建执行上下文
里面有VO对应ao(函数里的变量,没执行,undefined,执行,被赋值)

3.代码执行
函数里的变量赋值
多加一句:
作用域和执行上下文之间最大的区别是: 执行上下文在运行时确定,随时可能改变;作用域在定义时就确定,并且不会改变。

那么闭包是怎么能访问到已经执行完的变量呢???
function a(){
var aa=123
function b(){
var bb=234
console.log(aa)
}
return b
}
var test = a()()
在这里插入图片描述
在这里插入图片描述a执行就是b定义,所以a执行的时候,就有b用a的的变量的作用域,a执行的时候,b看到的和a是一样的。所以垃圾回收机制并不会回收。a函数下的变量被b函数引用,所以内存回收机制没有回收a函数。外函数的栈内存和堆内存都没有被回收。除非调用外面的函数时没有赋值给一个变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值