注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

幽狼De博客

记录成长中的点点滴滴

 
 
 

日志

 
 

关于javascript闭包的问题(未解决)   

2009-07-22 14:22:32|  分类: DIV+CSS+JS |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
http://www.cnblogs.com/xswdb/articles/1437958.html
遇到一个关于Javascript闭包的很奇怪的问题:
 1 <html xmlns="http://www.w3.org/1999/xhtml">
 2 <head>
 3     <title></title>
 4     <script language="javascript"> 
 5        function getFuncs()
 6        {
 7           var funcs = new Array();
 8           for(i=0;i<3;i++){
 9             funcs[i]=function(){
10                alert(i);
11             }
12           }
13           return funcs;
14        }
15        function initiate(){
16          var fs = getFuncs();
17          for(i=0;i<fs.length;i++){
18           fs[i]();
19          }
20        }
21        initiate();
22    </script>
23 </head>
24 <body>
25 <form>
26     <input id="id0" type="text"/>
27     <input id="id1" type="text"/>  
28     <input id="id2" type="text"/>  
29 </form>
30 </body>
31 </html>
32 

      显式的结果依次为0,1,2

      而对于下面的内容,

 1 <html xmlns="http://www.w3.org/1999/xhtml">
 2 <head>
 3     <title></title>
 4 </head>
 5 <body>
 6 <form>
 7     <input id="id0" type="text"/>
 8     <input id="id1" type="text"/>  
 9     <input id="id2" type="text"/>  
10 </form>
11     <script language="javascript"> 
12        function setFuncs()
13        {
14           var funcs = new Array();
15           for(i=0;i<3;i++){
16             document.getElementById('id'+i).onclick=function(){
17                alert(i);
18             }
19           }
20        }
21        setFuncs();
22    </script>
23 </body>
24 </html>
25 

 

无论点击哪个按钮都会显示3.

      上面两个例子唯一不同之处在于,一个将生成的匿名函数放在了数组里,另一个放在了Dom对象的属性里,这两者到底有什么区别呢??

附:

      对于例2中的解决方法如下:

关于javas<wbr>cript闭包的问题(未解决)  - frieboy168 - 幽狼De博客关于javas<wbr>cript闭包的问题(未解决)  - frieboy168 - 幽狼De博客Code
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    
<title></title>
</head>
<body>
<form>
    
<input id="id0" type="text"/>
    
<input id="id1" type="text"/>  
    
<input id="id2" type="text"/>  
</form>
    
<script language="javascript"> 
       
function setFuncs()
       {
          
var funcs = new Array();
          
for(i=0;i<3;i++){
            (
function(){var j=i;    document.getElementById('id'+j).onclick=function(){
               alert(j);})();
           
            }
          }
       }
       setFuncs();
   
</script>
</body>
</html>

  评论这张
 
阅读(428)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017