猿问

关于for循环中i的用法

    for(var i=0,l=as.length;i<l;i++){

        as[i].onmouseover=function(){

          reset();

          this.style.background='#ccf';

          index=this.getAttribute('selectid')-1;

          //index=i;为什么这样不行??????????

        }

}

为什么不能直接用i给index赋值,而是要通过别的与i无关的方式赋值(前提index=this.getAttribute('selectid')-1和index=i在逻辑上是值是一样的



栖息在月亮上的麻雀
浏览 1858回答 3
3回答

ruibin

这是一个典型的闭包问题,由于事件是异步的。所以在执行onmouseover时此时所有的i都变成了as.length了,如果不明白,可以看看闭包。当然,这里你也可以直接在onmouseover里面打印i的值,一看就明白了。

qq_灿_6

第一种改法:index=function(num){return num;}(i);第二种改法:index=function(num){return function(){ return num}}(i);
随时随地看视频慕课网APP
我要回答