闭包概念:
能够访问另一个函数作用域的变量的函数,来个栗子

clipboard.png

为何son函数可以访问到father函数的变量?
前提知识:

    js的数据基本类型:Number boolean String Null Undefined Symbol
    复杂类型:Object

基本数据类型放在的 “栈” 中 ,负责数据类型是放在“堆”中,对于js,存储基本数据类型采用的是 键:值来存的。
来个手撸的图

clipboard.png
简单的说在使用基本数据类型的时候,使用的值,在使用对象的时候使用其实是一个地址。
function也是一个Object的分支,
在函数执行的时候,先进行预编译的过程 ,所以先创建father的AO与GO,对于son,先创建自己的AO与GO,当自己的找不到的时候,会从父级的去查找。
随着son执行完毕,son的执行环境被销毁,接着执行fn(),然后执行环境被销毁,所以只会剩下全局的环境,所以son函数还在的,虽然执行环境(AO被销毁)。

闭包解决的问题:
1、获取到函数内部的变量
2、让变量不会随着函数执行完毕就销毁而是保存在内存中
3、模拟私有变量...........
闭包产生的问题
1、容易造成内存泄漏,保存的多了,却没有释放
2、this的指向问题,在闭包里,this指向的是window

关于闭包的小东西
比如 注释部分省了外壳,

clipboard.png


kkw凯凯王
42 声望2 粉丝