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等命名的指针变量的循环而出现错误。