闭包就是能够读取其他函数内部变量的函数,在本质上是函数内部和函数外部链接的桥梁。不会触发垃圾回收机制
如果函数作为参数传递 或者 返回值是一个函数 一般都是闭包
function fun(a,b) { console.log(b) return { fun: function(c) { return fun(c,a); } }; } var d = fun(0); //undefined //a=0;b=undefined;返回一个函数fun: function(c) { return fun(c,a); } d.fun(1);//0 //执行返回的函数fun(c,a);a=0;b=undeined =>c=1;a=0; => a=1;b=0; d.fun(2);//0 //执行返回的函数fun(c,a);a=0;b=undeined =>c=2;a=0; => a=2;b=0; d.fun(3);//0 //执行返回的函数fun(c,a);a=0;b=undeined =>c=3;a=0; => a=3;b=0; var d1 = fun(0).fun(1).fun(2).fun(3);//undefind;0 1 2 //a=0;b=undeined =>c=1;a=0 =>a=1;b=0 =>c=2;a=1;=>a=2;b=1 => c=3;a=2 =>a=3,b=2 var d2 = fun(0).fun(1);//undefined 0 d2.fun(2);//1 d2.fun(3);//1