闭包
一、
function a(){
var b = 1;
var c = 1;
c++;
function aa(){
b++;
alert('B:'+b);
alert('C:'+c);
}
alert('外'+b)
return aa
}
var aaa = new a();
aaa();
aaa();
这就是闭包!可以通过alert出的数值很好的理解,闭包造成的情况。
在aa()中,通过得到他的外部函数的b,造成b存在于内存中,并且b的生命周期和aa(),没有像c一样在a()执行完成后清除,而b与aa()这种形式就是闭包
闭包(Closure)这个词的意思是封闭,将外部作用域中的局部变量封闭起来的函数对象称为闭包。被封闭起来的变量与封闭它的函数对象有相同的生命周期。
二、
function Foo(){
var name = 'fooname';
var age = 12;
this.getName = function(){
return name
}
this.getAge = function(){
return age
}
}
var foo = new Foo();
foo.name; // => undefined
foo.age; // => undefined
foo.getName(); // => 'fooname'
foo.getAge(); // => 12
第一个例子和第二个例子原因一样,因为在Foo作用域外,所以不能取得其内部参数
而通过getName和getAge这种闭包形式,可能从Foo内部取得name和age的参数。