闭包有些复杂而且工作中也非常少的用到,但是面试官们却非常喜欢考,为什么?因为够复杂,能够体现面试人员是个高水平的,换句话说类似于本科毕业证一样的存在。尽管知道并不是所有大学生都对这个工作理解很深,但是至少大学生对该工作理解较深的人数,比没上大学的要多得多,这倒是事实。
而这个问题也是差不多的存在,知道闭包的总比不知道的要厉害,尽管它自身没什么卵用。
下面就是一个简单的闭包:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 9 <script> 10 //闭包可以访问函数的局部变量,并让其长期驻留内存 11 function a(){ 12 var i=0; 13 return function(){ 14 return ++i; 15 } 16 } 17 var fun=a(); 18 alert(fun()); 19 alert(a()()) 20 21 22 23 function fn1(num) {//发动,1 24 alert(num); 25 return function fn2() {//发动,没有参数,向上查找1 26 alert(num); 27 return function fn3(num) {//发动,传入参数3,返回3 28 alert(num); 29 function fn4() {//不发,加了return才会有返回值 30 alert(num) 31 } 32 } 33 } 34 35 } 36 var fn2 = fn1(1); 37 fn2(2)(3)(4); 38 39 </script> 40 41 </body> 42 </html>
简单来说,就是在函数的返回值那一块再添加一个函数。
这个函数因为是属于上一个函数内部的,所以可以调用,获得其中的值,于是,如果将这个值返回的话,就可以做到:【外部变量,函数可以获得内部变量的值】,仅此而已的东西。
当然,目的尽管就这么多,但是起中国的花样也是不少的。