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

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

為什么一定要改成this?為什么別人的代碼沒用this也能出效果?

我的: window.onload = function(){
??????? ?
???????????? changecolor();
????????? }
???? // 鼠標移動改變背景,可以通過給每行綁定鼠標移上事件和鼠標移除事件來改變所在行背景色。
???????????? function changecolor(){
????????? var cc=document.getElementsByTagName("tr");
???????????? ?
????????? for(var i=0;i<cc.length;i++)
????????? {
????????? cc[i].onmouseover=function(){
?????????????? cc[i].style.backgroundColor="#f2f2f2";
???????????? ?
????????? }?? ?
???????? ?
?????????? cc[i].onmouseout=function(){?? ?
????????????? cc[i].style.backgroundColor="#fff";
???????? ?
????????? } ?
?? ??? ?
????????? }
?? ?
?? ? }
把cc[i]改成this就可以了,這是為什么呢?

別人的:?window.onload = function(){
????????? var tr=document.getElementsByTagName("tr");
????????? for(var i= 0;i<tr.length;i++)
????????? {
????????????? bgcChange(tr[i]);
????????? }
???? // 鼠標移動改變背景,可以通過給每行綁定鼠標移上事件和鼠標移除事件來改變所在行背景色。
????? }??????? ?
???? function bgcChange(obj)
???? {
??????? obj.onmouseover=function(){
??????????? obj.style.backgroundColor="#f2f2f2";
??????? }
??????? obj.onmouseout=function(){
??????????? obj.style.backgroundColor="#fff";
??????? }
?? ? }

不懂這些區別在哪里?

正在回答

3 回答

this代表當前作用域,,而tr[i],當鼠標放到某一行 應該沒有辦法自動識別出i=??

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

????我們可以看看整個函數執行的過程。

????首先i=0,同時為 tr[0]綁定事件onmouse,接著i=1,i=2,當i=3的時候,由于i<tr.length(tr.length=3);所以跳出了循環。

????這時候i=3,并且保存到了內存當中。

????于此同時,tr[i].onmouseover/tr[i].onmouseout這兩個事件是沒有執行的,而for循環已經結束了。

????i在內存保存=3;當鼠標經過觸發事件的時候,執行函數cc[i].style.backgroundColor="#f2f2f2";/? cc[i].style.backgroundColor="#fff";,由于cc[3]這個節點是不存在的,所以控制臺報錯 can not ......。

? ??

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

都表示上下文環境

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

舉報

0/150
提交
取消

為什么一定要改成this?為什么別人的代碼沒用this也能出效果?

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

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

幫助反饋 APP下載

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

公眾號

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