什么是闭包?
function a(){
var n = 0;
function b(){
n++;
console.log(n)
}
b();
b();
}
a(); //控制台输出1,在输出2
再来一段代码:
function a(){
var n =0;
console.log(this) ;//指代a这个对象
this.b = function(){
n++;
console.log(n)
}
}
var c = new a();
c.b(); //控制台输出1
c.b();//控制台输出2
闭包就是有权访问另一个函数的作用域内变量的函数都是闭包
这里b函数访问了构造函数a里面的变量,所以形成了一个闭包
function a(){
var n =0;
function b(){
n++;
console.log(n);
}
return b;
}
var c =a();
c(); //1
c();//2
上面的代码: var c = counter(); 这一句couter()返回的势函数b,那这句就等于var c = b;
c(),这一句就等于b();注意,函数名这是一个标识(指向函数的指针),而()才是执行的函数。