闭包与变量

 1 // 闭包与变量
 2 function createFunctions(){
 3   var result=new Array();
 4   for(var i=0;i<10;i++){
 5     result[i]=function(){
 6       return i;
 7     };
 8   }
 9   return result;
10 }
11 //这个函数用回返回一个函数数组;每个函数都返回时;
12 // 因为每个函数的作用域中都保存着createFunctions()函数的活动对象,他们引用的都是同一个变量i;当createFucntion返回后,
13 // 变量i对的值为10;此时每个函数都引用着保存变量i的同一个变量对象;所以再每个函数内部的i的值都是10;
14 //为了让符合预期:可以:
15 function createFunctions(){
16   var result=new Array();
17   for(var i=0;i<10;i++){
18     result[i]=function(num){
19        return function(){
20          return num;
21        }
22     }(i);
23   }
24   return result;
25 }
26 //在这里我们将匿名函数的值复制给数组,这里匿名函数有提个参数num;也就是最终函数要返回的值;在调用每个匿名函数的时候,
27 // 我们传入了变量i;由于函数参数是按值传递的;所以会将变量i的当前值复制给参数num;儿在这个匿名函数内部,又创建并返回一个访问num的闭包;

猜你喜欢

转载自www.cnblogs.com/yangguoe/p/9054563.html