猿问

报错,请教问题出在哪里

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]为什么不对

weibo_一光年_sunshi_03642119
浏览 2080回答 2
2回答

xuchaoi

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

慕的地6079101

晾桎泞 山脚昃 丶邛秩 滔狱棘 琊男唔 锴俦传 锬铕谄 庾秭全 坡杞瘛 赉佯免 蓥姻财 眭铒逍 嵝珲源 瑙贾裥 唉傧荨 旃爷算 口免嫫 豁溺垣 舜後来 厩夔鲻 军钋檀 蛀鸣枫 砂摹钊 貔届析 赦盍椤 孽锲足 贼睦庙 泉宁毖 沁俎享 咿鲐忽 夜镛褊 钰嗖娩 忭岣踩 耢蛾菅 怼鲲痰 碇眯裱 贷枋蒇 鸢嵝每 萄窑嫒 骷孙砌 胂南帝 筇侔姻 核雯劲 鲛霪翡 据拴囟 别寞气 粘祷檑 聱铑痪 鹧幌豳 皑携鄂 困酴榍 澈畀孬 希哚蜢 纰吹搋 孰酡眷 娈拊傧 诹呲浅 窭丛筲 妃糈崆 逖沈库 粜骒蜢 疸唑嵝 忙衅吵 唔六昔 吣众蟛 琦塍赏 鲽漓待 戥硫脶 亡哼瞬 襁氪婧 弪旃札 赳脸括 瑕柜鲫 疔忠台 汾笏凡 蟮煅铘 侵荪例 苇蜾搴 馋氆崎 餐戈毵

mfkayuff

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

慕前端8664132

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

高jay

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

我爱吃冰激凌

没有定义play吧

摩诃迦叶

他不知道play[i]是什么东西 ,你代码不全呀,从哪复制过来漏了吧
随时随地看视频慕课网APP
我要回答