什么是闭包?
1、密闭的容器,类似于set,map容器,存储数据的
2、闭包是一个对象,存放数据的格式,key:value
形成的条件:
1、函数嵌套
2、内部函数引用外部函数的局部变量
闭包的优点:
延长外部函数局部变量的生命周期
闭包的缺点:
容易造成内存泄漏,老是不销毁
注意点:
1、合理使用闭包
2、用完闭包要及时清除(销毁)
案例一:请结合断点调试
1 function fun(){ 2 var count = 1; 3 return function(){ 4 count++; 5 console.log(count); 6 } 7 } 8 var fun2 = fun(); 9 fun2(); //2 10 fun2(); //3
案例二:请结合断点调试
1 function fun(n,o){ 2 console.log(o); 3 return { 4 fun:function(m){ 5 return fun(m,n) 6 } 7 } 8 } 9 var a = fun(0); //闭包发生在a上,闭包对象存储在a上,a上的n是没变的 10 a.fun(1); //0 11 a.fun(2); //0 12 a.fun(3); //0 13 14 var b = fun(0).fun(1).fun(2).fun(3).fun(4); //undefined,0,1,2,3,4,;闭包发生在每一个新的对象上 15 16 var c = fun(0).fun(1); //闭包发生在c上, 17 c.fun(2); //1 18 c.fun(3); //1