闭包表面现象:
综上所以什么是闭包:现在这个father()就是一个 闭包,由父函数和子函数构成,子函数在调用的时候读取父函数的变量,就产生了闭包。
(1)有父子函数的关系
(2)子函数调用了父函数的变量
(3)子函数有调用
闭包底层原理
必须懂的几个点
1.变量的生命周期:局部变量的生命周期在函数执行完成之后就到头了;全局变量的生命周期在页面关闭之后就到头了。
2.垃圾回收机制:定期检查你数据使用情况
策略:标记清除和引用计数。
注意:如果说这个数据有引用的关系,就不会被回收。
3.执行上下文(当前代码的执行环境,EC)
创建EC后会执行两个阶段1.创建阶段2.代码执行阶段
(1)全局环境
(2)函数环境
(3)eval环境
4.执行上下文栈(ECS),函数调用栈(call stack)
(1)变量对象
普通函数,定义函数的时候是嵌套的,调用的时候也是嵌套的,
闭包函数,定义函数的时候是嵌套的,调用的时候是独立的。