1.什么是闭包
JavaScript闭包就是在另一个作用域中保存了一份它从上一级函数或作用域取得的变量,而这些变量是不会随着上一级函数的执行完成而销毁。
案例:
function A(){
var i=0;
function b(){
window.alert(i++);
}
return b;
}
//闭包->gc垃圾回收机制
A(); //此时内存中有i空间,调用完后垃圾回收机制会默认将i空间回收
var c=A(); //将返回的b交给c,而b函数中用到i,i空间不会被回收,则i闭包
c();//输出0;
c();//输出1,从而证明i变量被闭包;
这样在执行完var c=a()后,变量c实际上是指向了函数b,b中用到了变量i,再执行c()后就会弹出一个窗口显示i的值(第一次为0)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个我们通常所谓的“闭包”。
闭包作用:就是在a执行完并返回后,闭包使得JavaScript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。
2.闭包解释
(1)闭包和gc(垃圾回收机制)是相关联的;
(2)闭包实际上是涉及到一个对象的属性,何时被gc处理的问题。
(3)怎样才能对对象的属性形成一个闭包;