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