<!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循环外面还可以用啊?求高手,,,,,,,,

解决方案 »

  1.   

    js不存在块级作用域  只要是在函数内定义的变量则整个函数都可以访问  所以i在for循环外面(但要在对应都的函数里面)还可以用  至于为啥是6  因为i本来是5  i++后变成6  
      

  2.   

    为啥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也是可以在后面访问到的.....
      

  3.   

    for(var i=0;i<array.length;i++)这句话你理解清楚了没啊,红色部分就是普通的定义变量,又没人说出了循环就销毁变量
    蓝色部分是在一次循环结合后执行的,i等于5时,进入循环,然后结束循环时执行i++,i=6,此时就不符合进入循环的条件了别人家这么写你也这么写,先理解了意思。<!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>
      

  4.   

    饿 第二个问题1楼理解得正确for循环是没有自己的作用域for(var i=0;i<=3;i++)
    {
      var aaa=i;
    }
    alert(aaa);
    这样也都可以访问
      

  5.   


    别人那么写我只能这么写啊,我下的JS电子书都没说过JS没有块作用域啊,,
      

  6.   

    循环时,只执行了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);
                              });
    }
      

  7.   

    用闭包解决此问题:
    <!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>
      

  8.   

    <!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>