javascript 循环内不认对象
以下两段代码:   
 var   i   =   0;    
 arr[i].onmouseover   =   function()   {    
       arr[i].getElementsByTagName( "div ")[i].style.left   =   100;    
       arr[i].getElementsByTagName( "div ")[i].style.top   =   20;    
       arr[i].getElementsByTagName( "div ")[i].style.display   =    "block ";    
 }    
       arr[i].onmouseout   =   function()   {    
       arr[i].getElementsByTagName( "div ")[i].style.display   =    "none ";    
 }      
 以上代码完全正常,可以达到效果,但是,把i编程循环中的变量后,即把i=0变成循环中的:     
 for(var   i   =   0;   i <arr.length;   i++)   {    
       //这里放上面那段去掉第一行var   i   =   0;的全部代码    
 }      
 浏览器报错,arr[...]为空或不是对象。    
 arr.length能够输出具体数值4循环也能输出i=0,1,2,3    
 什么倒头问题啊!
------解决方案-------------------- <script type= "text/javascript ">  
 var rover = function (i) { 
 	return function () { 
 		arr[i].getElementsByTagName( "div ")[i].style.left = 100;  
 		arr[i].getElementsByTagName( "div ")[i].style.top = 20;  
 		arr[i].getElementsByTagName( "div ")[i].style.display =  "block ";  
 	}; 
 }; 
 var rout = function (i) { 
 	return function () { 
 		arr[i].getElementsByTagName( "div ")[i].style.display =  "none "; 
 	}; 
 };   
 arr[i].onmouseover = rover(i); 
 arr[i].onmouseout = rout(i); 
  </script>
------解决方案--------------------循环引用时做为循环指针的变量被误改写的问题。 
 js这一类的脚本语言变量的作用域经常让初学者犯晕, 
 所以,建议在写稍复杂的js代码的时候,循环的指针不要用i,n,m等过于简单的字母。 
 避免当函数之间互相调用时,两个函数中因同时存在以i,n,m等命名的指针变量的循环而出现错误。