为了账号安全,请及时绑定邮箱和手机立即绑定

报错,请教问题出在哪里

报错,请教问题出在哪里

window.onload=function(){    for(var i=0;i<play.length;i++){    play[i].onmouseover=function(){play[i].style.backgroundColor="blue";}    };    }问题描述: play[i] is undefined             play已经定义,将function里面的play[i]改成this没有出错,想知道play[i]为什么不对
查看完整描述

2 回答

已采纳
?
xuchaoi

TA贡献4条经验 获得超5个赞

首先,外层的for循环只是为每个play对象绑定一个鼠标事件。而最后面的匿名函数并没有执行,当鼠标碰到某个play对象时才会触发这个匿名函数。此时,for循环其实已经执行完了,那么i的值就是play.length,如果代码里写的是play[i],那么play[play.length]当然是underfined了,数组最后的一个元素的i值应该是play.length-1。(这里用play[i]的逻辑也不对)

查看完整回答
5 反对 回复 2016-11-10
?
mfkayuff

TA贡献28条经验 获得超15个赞

徐超同学说的很好呀,简单点,你可以在onmoueover里把 i 打印出来,你就会更理解徐超同学的话了

查看完整回答
反对 回复 2016-11-10
?
慕前端8664132

TA贡献20条经验 获得超0个赞

把后面那个play[i]换成this


查看完整回答
反对 回复 2016-11-10
?
高jay

TA贡献96条经验 获得超122个赞

看到楼上的回答我也是醉了,这明显是闭包引起的,for循环创建了闭包,在后面一个函数里只能取到最后一个i的值所以用this取到的是当前play[i]的值,而里面如果用play[i]的话跟前面的play[i]就不是同一个东西了。止于为什么是报undefined而不是返回play:last的值我也是纳闷。
查看完整回答
反对 回复 2016-11-09
?
我爱吃冰激凌

TA贡献1条经验 获得超0个赞

没有定义play吧

查看完整回答
反对 回复 2016-11-09
?
摩诃迦叶

TA贡献146条经验 获得超54个赞


他不知道play[i]是什么东西 ,你代码不全呀,从哪复制过来漏了吧

查看完整回答
1 反对 回复 2016-11-09
点击展开后面1
  • 2 回答
  • 1 关注
  • 1983 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信