关于js中的闭包问题

42次阅读

共计 533 个字符,预计需要花费 2 分钟才能阅读完成。

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

为何 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

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

正文完
 0