刚上手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);
}
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);
}
解决方案 »
- attachEvent()监听函数里面的this指向哪里?addEventListener()里面的是正常的,这样写可不可以?
- JS 隐藏显示DIV
- javascript正则表达式验证邮箱不判断是否有.的问题
- 帮我解释一下下边的JavaScript代码:
- 请教标签A的href为document.getElementById("Image2").src 的链接问题?
- 这段脚本不知怎么写,大家帮帮忙
- JS实现二维码扫描的问题
- 如何用javascript在页面上实现类似平常窗口中选项卡的功能(tag)
- 求救!为什么返回数组就成空值了
- 一个简单的问题!!!
- jquery $(this)怎么输出this下第一个span的内容
- eval(function(p,a,c,k,e,d)的加密和解密程序,看不懂,也不知道怎么用
1、第一个你可以这么理解,当鼠标放上去的时候是不是for已经执行完了,然而alert却保存着对i的一个引用,此时i的值肯定就是5了。
2、中之所以能得到满意的结果,你可以设想在每一次i++的时候回去调用一个函数,此时的index保存的是对函数参赛的引用,相当于去连续调用执行了4次函数,你说你每次调用同一个函数,参赛传的不同,里面的东西能一样吗
(function(index){})(i)代表强制执行的意思。