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

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

 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);
时间: 2025-02-01 02:05:53

javascript-匿名函数、闭包常见问题(2).的相关文章

javascript匿名函数 闭包

匿名函数 (function(){                console.info("111111111");            })(); var my = (function(){                return "11111111";            })(); 函数里放匿名函数叫闭包 function my(){                return function(){                    retur

js匿名函数闭包

函数声明: function functionName(arg0,arg1){ //函数体 } 函数表达式: var functionName = function(arg0,arg1){ //函数体 } 函数声明和函数表达式之间的主要区别是前者会在代码执行前被加载到作用域中,而后者是在代码执行到那一行的时候才会有定义.另一个区别是函数声明会给函数指定一个名字,而函数表达式则创建一个匿名函数,然后将这个函数赋给一个变量 1 递归 递归函数是在一个函数通过名字调用自身的情况下构成的,例如: fun

JavaScript 匿名函数

// 仅执行一次的匿名函数 ;(function ()//最常见的版本 圆括号包裹起来 表示输入括号很纠结 懒人绝对不理解为什么要有圆括号 { ; console.log( 1 ,2 ,3 ) }()) ;!function ()//其实也可以这样使用 偷懒成功 { ; console.log( 1 ,2 ,3 ) }() , function ()//只要 function 前面不是 分号 花括号等结束符号 是可以直接用逗号使用的 { ; console.log( 4 ,5 ,6 ) }()

JavaScript匿名函数的使用

JavaScript匿名函数的使用:  http://www.cnblogs.com/skykang/archive/2010/12/03/1895274.html 一.什么是匿名函数? 在Javascript定义一个函数一般有如下三种方式: 1. 函数关键字(function)语句:       function fnMethodName(x){alert(x);}    2. 函数字面量(Function Literals):       var fnMethodName = functio

速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数

[源码下载] 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函数返回值 可变函数 匿名函数 闭包函数 回调函数 示例1.函数的相关知识点 1(基础)function/function1.php <?php /** * 函数的相关知识点 1(基础) */ // 可以在相关的 function 声明语句之前调用该函数 f1(); function f1() { echo "f1"; echo "<br />"; } // 这里调用

(转)javascript匿名函数的写法、传参和递归

(原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 http://www.veryhuo.com 2011-08-07 断桥残雪部落格 投递稿件 我有话说 今天在整理javascript入门培训的PPT时,提到了匿名函数,所以拿来分享下心得. 匿名函数的写法顾名思义,就是没有名字的函数(⊙﹏⊙b汗).匿名函数通常用于javascript作用域的控制,可以有效的避免对全局变量的污染.常见的匿名函数有下面四种写

(转)Javascript匿名函数的写法、传参、递归

(原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 javascript匿名函数的写法.传参和递归 http://www.veryhuo.com 2011-08-07 断桥残雪部落格 投递稿件 我有话说 今天在整理javascript入门培训的PPT时,提到了匿名函数,所以拿来分享下心得. 匿名函数的写法顾名思义,就是没有名字的函数(⊙﹏⊙b汗).匿名函数通常用于javascript作用域的控制,可以有效的

JavaScript匿名函数与委托

<1> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <!-- C#匿名函数--> <title></title> <script type="text/javascript"> var f1 = function (x, y) { //[1] 定义一个匿名函数,用变量f1来指向它(f1相当于一个委托,这个时候f1就可以当做一个

javascript匿名函数的各种执行形式

近期在研究Pomelo源码,这个框架基于Node.js,所以非要频繁地与JavaScript脚本打交道不可.因此,本文中我们来总结 javascript语言中匿名函数的主要目的及各种存在形式.其实,匿名函数在许多语言中都有提供,这个词语各位应该不陌生. 一.函数与匿名函数        首先,我们来看一下在javascript中正常函数定义的语法: function functionname(var1,var2,...,varX) {     //...函数体 } 如上所示,正常函数的定义需要一

Javascript 匿名函数与闭包

请见如下一个闭包示例: color = "red"; var obj = { color: "blue", getColor: function () { function displayColor() { return this.color; } return displayColor(); } } console.log(obj.getColor()); 在getColor函数内部再定义了一个displayColor,再又定义了一个displayColor函数,