刚上手js,对一段代码的运行结果不理解。我是想获取所有标签,放在controls数组里面,然后为每个标签设置事件响应。
for(var i=0;i<controls.length;i++){
controls[i].onmouseover = function(){
alert(i);
}
}
以上代码,为什么运行的时候,始终i的值显示出来是5(controls数组大小为5)??
我本来想,例如controls[3],alert的值应该是3啊。。下边这段代码和上边有什么区别呢?它到时能符合要求。for(var i=0;i<controls.length;i++){
(function(index)
{
controls[index].onmouseover = function(){
alert(index);
        }
        }
)(i);
}

解决方案 »

  1.   

    典型的闭门啊
    1、第一个你可以这么理解,当鼠标放上去的时候是不是for已经执行完了,然而alert却保存着对i的一个引用,此时i的值肯定就是5了。
    2、中之所以能得到满意的结果,你可以设想在每一次i++的时候回去调用一个函数,此时的index保存的是对函数参赛的引用,相当于去连续调用执行了4次函数,你说你每次调用同一个函数,参赛传的不同,里面的东西能一样吗
    (function(index){})(i)代表强制执行的意思。
      

  2.   

    为什么不用attachevent和addeventlistener?