function a() { //外部闭包域 ,一个名为 a 的 Function 对象
var p = 0; //私有变量 p
var innerA = function () { //内部闭包域 ,一个名为 innerA 的 Function 对象
console.log(p);
//对外部闭包域的私有变量进行了引用,故 innerA 对象的 function scope 会产生一个名为 closure 的对象属性,closure 对象内含有一个名为 p 的引用
}
innerA();//0
p++;
innerA();//1
}
a();
function a(){
var n = 0;
function inc(){
n++;
console.log(n);
}
inc();
inc();
}
a(); //1 2
function a(){
var n = 0;
this.inc = function () {
n++;
console.log(n);
};
}
var c = new a();
c.inc(); // 1
c.inc(); // 2
function a(){
var n = 0;
function inc(){
n++;
console.log(n);
}
return inc;
}
var c = a();
c(); // 1
c(); // 2
function fun(n,o) {
console.log(o)
return {
fun:function(m){
return fun(m,n);
}
};
}
var a = fun(0).fun(1);a.fun(1); a.fun(2); a.fun(3) //undefined 0 1 1 1
var b = fun(0).fun(1).fun(2).fun(3); //undefined 0 1 2
var c = fun(0).fun(1); c.fun(2); c.fun(3) //undefined 0 1 1