闭包的作用:
1.可以在函数的外部访问到函数内部的局部变量。
2.让这些变量始终保存在内存中,不会随着函数的结束而自动销毁。
运用实例理解闭包
function A() {
var i = 0;
return function B() {
i++;
return i;
}
}
var C = A();
console.log(C()); //1
console.log(C()); //2
console.log(C()); //3
C = null;
在函数A中的内部变量除了能被A访问外,还能被函数A所包含的环境内所在的函数B访问(原理:javascript作用域链),既然函数B可以访问到A的内部变量x,那么我们将函数B作为函数A的返回值进行返回,在函数A的外部用一个C来接收这个值。C 就等于函数B ,那么在函数A外部操作C时,实际上就是操作函数B。而这个函数B是可以访问到函数A的内部变量的。所以函数A外部的C也可以反问函数A的内部变量。
这样就实现了函数外部访问函数内部变量的操作。
因为闭包的这个作用,也就有了另一个作用:被引用的内部变量将和C一同存在(因为函数B能访问函数A的内部变量),当函数A执行完后,这个内部变量不会被自动垃圾回收机制回收掉(函数A的结束执行不会影响到C,也就是内部函数B,所以函数B的环境一直存在,直到变量C被注销)。