日期:2014-05-16  浏览次数:20411 次

一个怪异的问题,,求高手解惑
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;