码迷,mamicode.com
首页 > 其他好文 > 详细

匿名函数和闭包

时间:2018-03-24 23:49:52      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:body   资源   ret   回收   通过   执行   var   建议   nbsp   

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()())

 

匿名函数和闭包

标签:body   资源   ret   回收   通过   执行   var   建议   nbsp   

原文地址:https://www.cnblogs.com/redpen/p/8641674.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!