可以访问函数内部变量的函数就是闭包
闭包就是在一个函数A内部定义一个新的函数B,并且这个新函数B,调用了在函数A内定义的变量,并且在函数A外部被调用,这就形成了闭包
。
优点:
可以产生块级作用域
访问其他函数内部变量,
避免定义全局变量所造成的污染,发生命名冲突
缺点:可能会造成内存溢出,因为闭包会将它外部函数的作用域保存在内存中,过度使用闭包,有可能会造成泄漏。
因为被全局变量一直在引用
垃圾回收机制,被另一个作用域引用的变量不会被回收。
- 基本类型变量(Number 、Boolean、Undefined、String、Null)的值一般都是存在栈内存中,
- 引用类型变量(Array、Object、Function)的值存储在堆内存中,栈内存存储对应空间地址