前言
学习闭包前,先学点别的。
程序执行时:
1.编译阶段
创建变量对象GO,包括变量和函数作用域装在一块内存中。但是没有赋值,变量都是undefined,函数:0xxx
2.创建执行上下文
里面有VO对应ao(函数里的变量,没执行,undefined,执行,被赋值)
3.代码执行
函数里的变量赋值
多加一句:
作用域和执行上下文之间最大的区别是: 执行上下文在运行时确定,随时可能改变;作用域在定义时就确定,并且不会改变。文章来源:https://www.toymoban.com/news/detail-475318.html
那么闭包是怎么能访问到已经执行完的变量呢???
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函数。外函数的栈内存和堆内存都没有被回收。除非调用外面的函数时没有赋值给一个变量。文章来源地址https://www.toymoban.com/news/detail-475318.html
到了这里,关于学习并深入理解闭包的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!