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

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

為什么要用this.style不直接用tr[i].style呢?

function?changeColor(){
?????????var?tbody=document.getElementById("table").lastChild;
?????????var?tr=tbody.getElementsByTagName('tr');
?????????var?len=tr.length;
?????????for(var?i=0;i<len;i++){
?????????????tr[i].onmouseover?=?function(){
??????????????alert(this);
?????????????????this.style.backgroundColor="#f2f2f2";
?????????????}
?????????????tr[i].onmouseout?=?function(){this.style.backgroundColor="#fff";
???????????}
?????????}
?????}

在上面的代碼中為什么不能寫tr[i].style,有點理解不了了

正在回答

3 回答

我也有疑問,還有一點不懂,這段函數是要預編譯么?為什么for()循環的i會是最后的len值,正常的for()循環是不是也是這樣的?

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

我又翻了下書,然后我的理解是function(){

? ? ? ? ? ? ? alert(this);

? ? ? ? ? ? ? ? ?this.style.backgroundColor="#f2f2f2";

? ? ? ? ? ? ?}是一個函數閉包,此時在這個函數里面調用i應該是最后的一個值即是len也就是3,而tr[i]就是tr[len],相當于個tr這個數組新增加了一項默認值為undefined.在這里function(){this.style.backgroundColor="#fff";

? ? ? ? ? ?}是作為tr[i]這個對象的onmouseout屬性的值,也就是給tr[i]這個對象添加了一個方法。當函數被作為某個對象的方法調用時,this等于那個對象。


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

qq_夜舞天狼

我也有疑問,還有一點不懂,這段函數是要預編譯么?為什么for()循環的i會是最后的len值,正常的for()循環是不是也是這樣的?
2016-06-02 回復 有任何疑惑可以回復我~

因為那個地方是添加事件,那個事件函數并沒有執行,點擊執行的時候函數體就只有this這個變量,沒定義tr[i];

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

jinleli 提問者

你可以看下我下面的回答,這是我看書后的理解
2016-05-25 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么要用this.style不直接用tr[i].style呢?

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

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

幫助反饋 APP下載

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

公眾號

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