码迷,mamicode.com
首页 > 编程语言 > 详细

javascript-匿名函数、闭包常见问题(2).

时间:2015-03-05 18:58:22      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

★★★★来看一个经典的例子

 1 //想实现的是 arr[0]=0,arr[1]=1,arr[2]=2...arr[4]=4
 2         function box()
 3         {
 4             var arr=[];
 5             
 6             for(var i=0; i<5; i++)
 7             {
 8                 arr[i]=function()
 9                 {
10                     return i;
11                 };
12             }
13             
14             //循环已经执行完毕, i最终是4++  =>5 , 那么最终是5
15             //那么你再从里面调用 每个匿名函数的i 那必然是5
16             return arr;                //这里很重要 我们返回出的是 已经循环结束的i
17         }
18         
19         var b =box();
20         
21         for(var i=0; i<5; i++)
22         {
23             alert(b[i]());                    //=>5,5,5,5,5
24         }

修改1

 1 function box()
 2     {
 3         var arr = [];
 4         for(var i=0; i<5; i++)
 5         {
 6             arr[i]=(function(num)      //通过自我及时 执行匿名函数
 7             {
 8                 return num;
 9             })(i);
10         }
11         return arr;
12     }
13     
14     var b=box();
15     for(var i=0; i<5; i++)
16     {
17         alert(b[i]);          //这里的是b[i]
18     }

修改2

 1 function box()
 2     {
 3         var arr = [];
 4         for(var i=0; i<5; i++)
 5         {
 6             arr[i]=(function(num)      
 7             {
 8                 //num其实在这里
 9                 return function()    
10                 {                                    
11                     return num;                //因为闭包可以将变量驻留在内存中,和上面的累加是一样的
12                 }
13             })(i);
14         }
15         //已经执行完毕了,num为什么可以0,1,2,3,4
16         return arr;
17     }
18     
19     var b=box();
20     //console.log(b);
21     for(var i=0; i<5; i++)
22     {
23         alert(b[i]());
24     }

 

看一个小技巧

 1 var b=function()
 2         {
 3             alert(‘Lee‘);
 4         }(i)
 5     
 6     //所以改2的循环是可以改成 如下
 7     arr[i]=function(num)      
 8         {
 9             return function()    
10             {                                    
11                 return num;                
12             }
13         }(i);

 

javascript-匿名函数、闭包常见问题(2).

标签:

原文地址:http://www.cnblogs.com/VanqusherCsn/p/4316419.html

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