匿名函数和闭包

Posted redpen

tags:

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

1.匿名函数

通过自我执行来执行匿名函数

1 (function(){...})()  // 前面小括号是匿名函数,后面小括号是执行

函数里面放一个匿名函数

1 function box(){
2   return function(){
3     return ‘haha‘;  
4   }  
5 }
6 var b = box();
7 alert(b())
// alert(box()()) 不建议这么写

闭包

定义:有权访问另一个函数作用域中的变量的函数(在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量)

1. 使用匿名函数实现局部变量驻留内存中从而累加

 1 function box(){
 2     var age = 100;
 3     return function(){
 4         age++;
 5         return age;
 6     }
 7 }
 8 var b = box();
 9 aler(b());
10 aler(b());
11 aler(b());
12 aler(b());
b = null // 解除引用,等待垃圾回收

ps:由于闭包作用域返回的局部变量资源不会被立刻销毁回收,所以可能会占用更多的内存。过度使用闭包会导致性能下降,建议在非常必要的时候使用闭包

2.

 1 function box(){
 2         var arr = [];
 3         for(var i = 0; i < 5; i++){
 4             arr[i] = (function(num){
 5                 return function(){
 6                     return num;
 7                 }
 8             })(i);  // 及时执行自己
 9         }
10         return arr;
11     }
12     var b = box();
13     for(var i = 0; i < 5; i++){
14         alert(b[i]( ));
15     }

3.关于this对象(闭包不属于object,this指向window)

 1 var user = ‘window‘
 2 var box = {
 3     user: ‘box‘,
 4     getUser: function(){
 5         var that = this;
 6         return function(){
 7             // return this;
 8             return that.user;
 9         }
10     }
11 }
12 // alert(box.getUser()());  // 指向window对象
13 // alert(box.getUser().call(box));  // call,通过对象冒充指向box
14 alert(box.getUser()())

 

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

Golang中的匿名函数(闭包)

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

14.匿名函数和闭包

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

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

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