js中的闭包技术
1.特点:
-
函数嵌套函数
-
内部的函数可以引用外部函数的参数或者变量
-
参数和变量不会被垃圾回收机制回收,因为内部函数还在引用
function aaa(){
var a = 5;
function bbb(){
console.log(a);
}
return bbb;
}
var c = aaa(); //此时c是aaa内部return的bbb函数体,外部函数aaa已运行完毕,但是变量仍被内部函数引用,故不会释放。
c(); //打印结果是5
2.好处:
-
变量可以长期驻扎在内存之中
-
避免全局变量的污染,有私有成员
看下面例子:
1、普通函数调用:aaa执行完毕,就回收a变量,再次执行,重新赋值计算。
function aaa(){
var a = 1;
a++;
alert(a);
}
aaa(); //2
aaa(); //2
2、闭包方式调用:aaa执行后,由于a变量还在被内部函数引用,故不会被回收,再次计算,在上一次的结果上进行累加。
function aaa(){
var a = 1;
return function(){
a++;
alert(a);
}
}
var c = aaa();
c(); //2
c(); //3