读书人

一个怪异的有关问题求高手解惑

发布时间: 2012-03-09 21:42:53 作者: rapoo

一个怪异的问题,,求高手解惑

HTML code
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head>  <title> New Document </title>  <meta name="Generator" content="EditPlus">  <meta name="Author" content="">  <meta name="Keywords" content="">  <meta name="Description" content=""> </head> <body><input type="text" name="wb" /><input type="text" name="wb"/><input type="text" name="wb"/><input type="text" name="wb"/><input type="text" name="wb"/><input type="text" name="wb"/><script>function change(obj){        alert(obj);//这里的i是6    }(function(){    var array = document.getElementsByName('wb');    for(var i=0;i<array.length;i++){         //alert(i);这里面i的值是012345;            array[i].attachEvent("onmouseover",function(){                            alert(i); //这里的i是6                            change(array[i]);});        }        change(i);})();</script> </body></html>


为啥i最后的值是6啊,,为啥i在for循环外面还可以用啊?求高手,,,,,,,,




[解决办法]
js不存在块级作用域 只要是在函数内定义的变量则整个函数都可以访问 所以i在for循环外面(但要在对应都的函数里面)还可以用 至于为啥是6 因为i本来是5 i++后变成6
[解决办法]
为啥i最后的值是6啊
因为for循环的执行过程,在最后一次循环(i=5)后,还要执行一次i++,然后判断条件i<array.length,发现不满足,于是退出循环,所以循环结束后i=6
至于在for循环外部使用,这是js的问题了,i实际上相当于在外部定义的
var i;
for(i=0;i<array.length;i++)

所以
for(var i=0,abc=123;i<array.length;i++)
{
}
alert(abc);
像这种,abc也是可以在后面访问到的.....
[解决办法]
for(var i=0;i<array.length;i++)

这句话你理解清楚了没啊,红色部分就是普通的定义变量,又没人说出了循环就销毁变量
蓝色部分是在一次循环结合后执行的,i等于5时,进入循环,然后结束循环时执行i++,i=6,此时就不符合进入循环的条件了

别人家这么写你也这么写,先理解了意思。



HTML code
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head>  <title> New Document </title>  <meta name="Generator" content="EditPlus">  <meta name="Author" content="">  <meta name="Keywords" content="">  <meta name="Description" content=""> </head> <body><input type="text" name="wb" /><input type="text" name="wb"/><input type="text" name="wb"/><input type="text" name="wb"/><input type="text" name="wb"/><input type="text" name="wb"/><script>function change(obj){        alert(obj);//这里的i是6    }(function(){    var array = document.getElementsByName('wb');    for(var i=0;i<array.length;i++){         //alert(i);这里面i的值是012345;         /*            array[i].attachEvent("onmouseover",function(){                            alert(i); //这里的i是6                            change(array[i]);});        */            (function(key){            array[key].onmouseover = function(){alert(key)};        })(i)            }})();</script> </body></html>
[解决办法]
饿 第二个问题1楼理解得正确

for循环是没有自己的作用域

for(var i=0;i<=3;i++)
{
var aaa=i;


}
alert(aaa);
这样也都可以访问
[解决办法]
循环时,只执行了attachEvent 函数,绑定事件。

onmouseover 时 才执行
function(){
alert(i); //这里的i是6
change(array[i]);});
}

这时循环肯定执行完毕了,所以i 是 6.


var array = document.getElementsByName('wb');
for(var i=0;i<array.length;i++){
array[i].index=i;
array[i].attachEvent("onmouseover",function(){
alert(this.index);
});
}
[解决办法]
用闭包解决此问题:

JScript code
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head>  <title> New Document </title>  <meta name="Generator" content="EditPlus">  <meta name="Author" content="">  <meta name="Keywords" content="">  <meta name="Description" content=""> </head> <body><input type="text" name="wb" /><input type="text" name="wb"/><input type="text" name="wb"/><input type="text" name="wb"/><input type="text" name="wb"/><input type="text" name="wb"/><script>function change(obj){        alert(obj);//这里的i是6    }(function(){    var array = document.getElementsByName('wb');    for(var i=0;i<array.length;i++){         //alert(i);这里面i的值是012345;            array[i].attachEvent("onmouseover",(function(j){            return function(){            alert(j);            change(array[j]);            }            })(i));        }        //change(i);})();
[解决办法]
JScript code
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head>  <title> New Document </title>  <meta name="Generator" content="EditPlus">  <meta name="Author" content="">  <meta name="Keywords" content="">  <meta name="Description" content=""> </head> <body><input type="text" name="wb" /><input type="text" name="wb"/><input type="text" name="wb"/><input type="text" name="wb"/><input type="text" name="wb"/><input type="text" name="wb"/><script>function change(obj){        alert(obj);//这里的i是6    }(function(){    var array = document.getElementsByName('wb');    for(var i=0;i<array.length;i++){         //alert(i);这里面i的值是012345;            array[i].attachEvent("onmouseover",(function(j){            return function(){            alert(j);            change(array[j]);            }            })(i));        }        //change(i);})();</script> </body></html> 

读书人网 >JavaScript

热点推荐