匿名函数和闭包

Posted -小白白白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了匿名函数和闭包相关的知识,希望对你有一定的参考价值。

 1 //普通函数
 2 function Box(){
 3     return "Lee";
 4 }
 5 //匿名函数
 6 function () {               //单独的匿名函数是无法运行的,也无法调用
 7       return"Lee";
 8 }
 9 
10 //把匿名函数赋值给变量
11  var box =  function(){
12    return "Lee";
13 };
14 alert(box())
15 
16 //通过自我执行来执行匿名函数
17 (function(){          //(匿名函数)()     第一个括号放匿名函数 第二个括号执行
18     alert("Lee");
19 })();
20 
21 //把匿名函数自我执行的返回值赋给变量
22 var box = (function(){  
23     return "Lee";
24 })();
25 alert(box);
26 
27 //自我执行匿名函数的传参
28 (function(){  
29     alert(age);
30 })(100);
31 
32 //函数里放一个匿名函数
33 function box(){
34    return function(){    //闭包
35    return "Lee"
36 }
37 }
38 alert(box()())

闭包

 1 //通过闭包返回局部变量
 2 function box(){
 3     var age = 100;
 4     return function(){
 5      return age;
 6 }
 7 }
 8 alert(box()())
 9 
10 //使用全局变量进行累加
11 var age =100;
12 functon box(){
13   age++;
14 }
15 alert(age);
16 box();
17 alert(age)
18 
19 //使用局部变量累加
20 functon box(){
21  var age = 100  
22 age++;
23 return age
24 }
25 alert(box());  //多少次都是101
26 
27 //使用匿名函数实现局部变量驻留内存中从而累加
28 function box(){
29    var age =100;
30    return function(){
31     age++;
32    return age;
33 }
34 }
35 var b = box();
36 alert(b());
37 alert(b());  //实现累加
38 b = null; //解除引用 无法再执行

循环里的匿名函数

 1 functon box(){
 2    var arr = [];
 3    for(var i=0;i<5;i++){
 4    arr[i]=function(){    
 5    return i;
 6 }
 7 }
 8 //循环已经执行完毕 最终是5
 9    return arr;
10 }
11 var b=box()
12 for(var i = 0;i<5;i++){
13    alert(b[i]())
14 }
15 
16 //
17 functon box(){
18    var arr = [];
19    for(var i=0;i<5;i++){
20    arr[i]=(function(num){       //通过自我执行匿名函数  
21    return num
22 })(i);
23 }
24    return arr;
25 }
26 var b=box()
27 for(var i = 0;i<5;i++){
28    alert(b[i]())
29 }
30 
31 //改2
32 functon box(){
33    var arr = [];
34    for(var i=0;i<5;i++){
35    arr[i]=function(num){   
36    return function(){          //闭包可以将变量驻留在内存中
37         return num;
38 }
39 }(i);
40 }
41 
42    return arr;
43 }
44 var b=box()
45 for(var i = 0;i<5;i++){
46    alert(b[i]())
47 }

this对象

闭包里的this指向window

 1 var user = "The Window"
 2 var box={
 3   user:"The Box",
 4   getUser:functon(){
 5     //这里作用域的this是box
 6     var that = this;
 7    return function(){
 8    //这里作用域this是window
 9    return that.user
10 }
11 }
12 }
13 
14 alert(box.getUser()()); //the window
15 
16 //对象冒充
17 1.alert(box.getUser().call(box));  //the box
18 2.alert(box.getUser()());

 

以上是关于匿名函数和闭包的主要内容,如果未能解决你的问题,请参考以下文章

Golang中的匿名函数(闭包)

Go语言-make陷阱和闭包函数

14.匿名函数和闭包

自调用匿名函数(匿名闭包)解析与调用

自调用匿名函数(匿名闭包)解析与调用

php匿名函数和闭包函数及use关键字传参及Closure匿名函数类