亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

請問一下,為啥不能用as[i],能解釋的詳細一點么,比較笨╰( 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');

? ?//點擊三角
? ?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,一直想不明白,請解釋的詳細一點,比較笨謝謝大神
? ? ? ?};
? ?}

};

正在回答

2 回答

這就好比雙色球搖獎的時候先出來的六個球,出來一個被人拿走一個,等六個球都拿完了你再想用只能去用第七個了。實際上這是js的垃圾回收機制在作怪,事件發生后變量使用完畢在內存里立馬就會被銷毀,所以不會有剩下的,而使用this指代當前對象,你鼠標經過的是哪個它對應的就是哪個

3 回復 有任何疑惑可以回復我~
#1

羋麗蘺 提問者

很好,謝謝這么詳細的講解了,大概也懂了
2017-06-01 回復 有任何疑惑可以回復我~

原理就是用as[i]具體的執行結果就是每個? as[i].onmouseover后面的代碼都不會被執行,只是輸出?function () {
? ? ? ? ? ? as[i].style.background = "#456" 這個函數語句,因為這個function構成了一個閉包。

如果想要按照?as[i]這種寫法的可以?寫成 for (var i=0,l=as.length;l>i;i++) {
? ? ? ? as[i].onmouseover=(function () {
? ? ? ? ? ? as[i].style.background = "#456")();? 這樣后面的代碼會立即的執行。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

請問一下,為啥不能用as[i],能解釋的詳細一點么,比較笨╰( 0ω0)ノ

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號