請問一下,為啥不能用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,一直想不明白,請解釋的詳細一點,比較笨謝謝大神
? ? ? ?};
? ?}
};
2017-05-31
這就好比雙色球搖獎的時候先出來的六個球,出來一個被人拿走一個,等六個球都拿完了你再想用只能去用第七個了。實際上這是js的垃圾回收機制在作怪,事件發生后變量使用完畢在內存里立馬就會被銷毀,所以不會有剩下的,而使用this指代當前對象,你鼠標經過的是哪個它對應的就是哪個
2018-01-26
原理就是用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")();? 這樣后面的代碼會立即的執行。