javaScript中,闭包(closure)是一个非常重要的概念;
闭包是指一个函数可以访问另一个函数作用域中的变量,创建闭包最常见的方式就是一个函数中嵌套另一个函数,然后通过另一个函数访问外层函数作用域中变量;
一.闭包的特点:
1.函数中嵌套一个函数
2.嵌套的函数可以使用外层函数作用域中的变量和参数
3.参数和变量不会被垃圾回收机制回收
通常情况下,函数中声明的局部变量,会在函数执行完毕后被销毁.例如
function aa(){
var b=1;
alert(b);
}
aa();
当函数执行完毕后,函数内部的变量就不会在占用内存(下次调用aa()时,会在次创建变量),但闭包就可以使局部变量驻留在内存中,这样就不用使用全局变量,避免出现全局污染的情况.
一般形式的闭包函数;
var foo=function func(){
var num=0;
return function(){
console.log(num++);
}
}
foo();//0
foo();//1
foo();//2
f=null;//垃圾回收
num在变量执行完毕之后并没有被销毁,这是因为全局变量(在程序执行完毕后才会被销毁)foo存储func返回的匿名函数,而此返回的匿名函数会用到变量num.代码实现了局部变量的累加,又因为num是局部变量,所以不会对函数作用域外的同名变量产生污染.
二.使用闭包的优点;
1.局部变量可以长期驻扎在内存中
2.避免全局变量的污染
3.私有成员的存在
闭包现象的理解:它描述了函数执行完毕内存释放后,局部变量依然驻留在内存中一个现象;