請問一下,為啥不能用as[i],能解釋的詳細(xì)一點(diǎn)么,比較笨╰( 0ω0)ノ
window.onload= function () {
? ?var box=document.getElementById('divselect'),
? ? ? ?menu=box.getElementsByTagName('ul')[0];
? ? ? ?as=box.getElementsByTagName('a');
? ? ? ?title=box.getElementsByTagName('cite')[0],
? ? ? ?lis=box.getElementsByTagName('li');
? ?//點(diǎn)擊三角
? ?box.onclick= function () {
? ? ? ?menu.style.display = "block";
? ?};
? ?//遍歷as
? ?for (var i=0,l=as.length;l>i;i++) {
? ? ? ? as[i].onmouseover= function () {
? ? ? ? ? ? as[i].style.background = "#456";????這里為啥不能用as[i],非要用this,一直想不明白,請解釋的詳細(xì)一點(diǎn),比較笨謝謝大神
? ? ? ?};
? ?}
};
2017-05-31
這就好比雙色球搖獎(jiǎng)的時(shí)候先出來的六個(gè)球,出來一個(gè)被人拿走一個(gè),等六個(gè)球都拿完了你再想用只能去用第七個(gè)了。實(shí)際上這是js的垃圾回收機(jī)制在作怪,事件發(fā)生后變量使用完畢在內(nèi)存里立馬就會被銷毀,所以不會有剩下的,而使用this指代當(dāng)前對象,你鼠標(biāo)經(jīng)過的是哪個(gè)它對應(yīng)的就是哪個(gè)
2018-01-26
原理就是用as[i]具體的執(zhí)行結(jié)果就是每個(gè)? as[i].onmouseover后面的代碼都不會被執(zhí)行,只是輸出?function () {
? ? ? ? ? ? as[i].style.background = "#456" 這個(gè)函數(shù)語句,因?yàn)檫@個(gè)function構(gòu)成了一個(gè)閉包。
如果想要按照?as[i]這種寫法的可以?寫成 for (var i=0,l=as.length;l>i;i++) {
? ? ? ? as[i].onmouseover=(function () {
? ? ? ? ? ? as[i].style.background = "#456")();? 這樣后面的代碼會立即的執(zhí)行。