什么是闭包:使用别人的私有变量 优缺点: 缺点:会将闭包的值存在内存里面 ,会占用内存 ----网页的内存泄露 优点:1、可以使用局部变量, 2、JavaScript 变量可以是局部变量或全局变量 3、私有变量可以用到闭包。 说明:在做开发的时候尽量避免使用闭包
(一)闭包的形式
function f1(b){ var a=12; function f2(){ alert(a); //12 alert (b); //24 } return f2; } var f3=f1(24); //f3==f2(), f1()的返回值为f2; f3(); //上式的简写 /* var f3=(function(b){ //b为形参, var a=12; function f2(){ alert(a); alert (b); } return f2; })(24); //24为实参; f3();作用1 将一个变量长期驻扎在内存当中,用于循环中存索引值 (闭包就是函数的嵌套)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>闭包</title> <script> window.onload=function (){ var ali=document.getElementsByTagName ('li'); //获得每一个li // alert(ali.length ); for(var i=0;i<ali.length;i++){ (function (i){ ali[i].onclick =function (){ alert(i); } })(i) } }; </script> <style> li{ height:30px; width:100%; background: pink; margin-bottom: 20px; } </style> </head> <body> <ul > <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> </ul> </body> </html>作用2 私有变量计数器,外部无法访问,避免全局变量的污染
var count=(function(){ var a=1; function mm(){ a++; return a; } return mm; })(); alert(count());//2 alert(count());//3 var c=count (); alert(c); //4分享一个面试题
var name="global"; function foo(){ console.log(name); } function fooOuter1(){ var name="local"; foo(); } fooOuter1(); function fooOuter2(){ var name="local"; function foo(){ console.log(name); } foo(); } fooOuter2();结果为:
function test() { var value =2; return function (params) { console.log(value * params); //2*params console.log(window.value * params); //3*params } } value=3; var a = test();//后边的匿名函数 a(2); //params=2对1+2+3进行求和
var m=0; function f2(n){ temp=function (){ m+=n; } temp(); //方法的重写 f2.toString=function (){ return m; } return f2; } console.log(f2(1)(2)(3)); //算和 6 var aa=123; console.log(typeof aa.toString());; //string