闭包概念:
能够访问另一个函数作用域的变量的函数,来个栗子
为何son函数可以访问到father函数的变量?
前提知识:
js的数据基本类型:Number boolean String Null Undefined Symbol
复杂类型:Object
基本数据类型放在的 “栈” 中 ,负责数据类型是放在“堆”中,对于js,存储基本数据类型采用的是 键:值来存的。
来个手撸的图
简单的说在使用基本数据类型的时候,使用的值,在使用对象的时候使用其实是一个地址。
function也是一个Object的分支,
在函数执行的时候,先进行预编译的过程 ,所以先创建father的AO与GO,对于son,先创建自己的AO与GO,当自己的找不到的时候,会从父级的去查找。
随着son执行完毕,son的执行环境被销毁,接着执行fn(),然后执行环境被销毁,所以只会剩下全局的环境,所以son函数还在的,虽然执行环境(AO被销毁)。
闭包解决的问题:
1、获取到函数内部的变量
2、让变量不会随着函数执行完毕就销毁而是保存在内存中
3、模拟私有变量...........
闭包产生的问题
1、容易造成内存泄漏,保存的多了,却没有释放
2、this的指向问题,在闭包里,this指向的是window
关于闭包的小东西
比如 注释部分省了外壳,
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。