我们知道javaScript中变量可以是局部变量或者全局变量。函数可以访问由函数内部定义的变量,也可以访问函数外部定义的全局变量。但是我们在外部该怎么去访问到函数内部定义的函数呢,由此,我们就需要用到闭包。
首先:我们要知道闭包形成有三个必要条件:
(1) 一个函数A内部直接或者间接返回另一个函数B
(2) 函数B内部使用着函数A的私有变量
(3) 函数A外部有变量引用着函数B
function a() {
var num = 100
return function b() {
console.log(num)
}
}
var res = a()
闭包还有以下特点:(有利有弊)
(1) 延长了变量的声明周期
优点:变量会一直存在
缺点:需要一个不会销毁的函数执行空间,会一直存在内存中
(2) 可以访问函数内部的私有变量
优点:利用闭包函数可以访问函数内部的私有变量
缺点:执行空间不会销毁,会一直存在在内存中
(3) 保护私有变量
优点:保护私有变量不被外界访问
缺点:外界如果想访问私有变量,必须要利用闭包函数
由以上可以总结到:
当你需要延长变量的声明周期的时候,或者你需要访问某一个函数内部的私有数据的时候,你可以使用闭包函数来解决。但是当一段内存空间中有一个不会销毁的东西一直存在,就会出现内存占用,如果过多,就会导致内存泄漏,所以,要慎用闭包函数。