js中变量的作用域
了解闭包首要要了解js变量的作用域
- 函数内部可以直接读取全局变量
 - 在函数外部自然无法读取函数内的局部变量
 
1  | function f1(){  | 
- 父对象的所有变量,对子对象都是可见的
 
1  | function f1(){  | 
- 访问内部变量通过return
 
1  | function f1(){  | 
什么是闭包
我的理解就是定义在函数内部的函数。
闭包的优点
- 外部访问内部函数的变量
 - 产生常驻内存,不被回收
 
1  | function f1(){  | 
解析:f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收
闭包的缺点
- 由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大
 闭包会在父函数外部,改变父函数内部变量的值