<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <script type="text/javascript"> /* 理解:什么是闭包? 1.密闭的容器, 类似于set,map容器 2.闭包是一个对象,存放数据的格式:key:value 形成的条件: 1.函数嵌套 2.内部函数引用外部函数的局部变量 闭包的优点: 延长外部函数局部变量的生命周期 闭包的缺点: 容易造成内存泄露 注意点: 1.合理的使用闭包 2.用完闭包要及时清除(销毁) */ // 简单的闭包 function fun(){ let a=1; function b(){ console.log(a); } b(); } fun(); // Global 全局的变量对象 // Local 函数里面局部的变量对象 //闭包的应用场景 function fun(){ let count=1; return function(){ count++; console.log(count); } } var fun2=fun(); fun2(); //2 fun2(); //3 /* 说说它们的输出情况 */ function fun(n,o){ console.log(o) return { fun:function(m){ return fun(m,n) } } } var a=fun(0) a.fun(1) a.fun(2) a.fun(3) //underfined,0,0,0 var b=fun(0).fun(1).fun(2).fun(3)// underfined,0,1,2 var c=fun(0).fun(1) c.fun(2) c.fun(3)// underfined,1,1 </script> </body> </html>
闭包 下面五段代码分别输出什么?
for( var i=0; i<5;i++){ console.log(i) } //0,1,2,3,4 for(var i=0;i<5;i++){ setTimeout(function(){ console.log(i) },1000*i); } // 15 5,5,5,5,5 for(var i=0;i<5;i++){ (function(i){ setTimeout(funciton(){ console.log(i) },i*1000); })(i); } for(var i=0;i<5;i++){ (function(){ setTimeout(function(){ console.log(i); },i*1000); })(i); } //underfind 5,5,5,5,5 for( var i=0; i<5; i++){ setTimeout((function(i){ console.log(i) })(i),i*1000) } //0 ,1,2,3,4,0