什么是闭包
闭包就是一个函数以及对它的语法环境的引用,这两者的组合就叫闭包。更容易理解的说法就是:闭包能让外部作用域访问到函数作用域中的变量。另一种
下面是一个简单的闭包案例:
function foo(){
let name = 'zs'
function zoo(){
return this.name;
}
zoo()
}
在通常情况下,外部作用域是无法访问函数作用域中的变量的。但使用闭包,访问到了在foo函数中定义的变量。
闭包的作用
- 在函数外调用函数定义的变量(如上例所示)
- 将函数环境暂存在内存中,不会被js的垃圾回收机制清除。
闭包的生成条件
- 函数嵌套一个函数
- 内部函数引用了外部函数的变量
- 参数和变量不会被回收
- 外部函数返回(return)了内部函数。(一个待定条件)
闭包的注意事项
- 闭包会把函数的变量存在内存之中,如果闭包使用泛滥,将会导致内存占用过多,网页性能下降。ie用户还会导致内存泄漏。
- 由于闭包能访问函数作用域中的变量,所以不要随意使用这个特性,因为父级函数的域同时被多个子函数共享,如果随意改变父级函数作用域中的变量,所有子函数都会被影响。