第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

在鼠標(biāo)遍歷的時候為什么必須用this?

????for(var?i=0;i<as.length;i++){
????	as[i].onmouseover=function(){
????		this.style.background='grey';//這里用as[i]代替this就不會改變背景色
????	}
????	as[i].onmouseout=function(){
????		this.style.background='none';
????	}????	
????	as[i].onclick=function(){
????		title.innerHTML=this.innerHTML;
????	}
????}

在這段程序里,既然this指當(dāng)前事件的對像as[i],為什么不能用as[i].style.background='grey';來取代this呢?

正在回答

3 回答

問題在于:對于變量的作用域混淆,原因:當(dāng) onmouseover 事件執(zhí)行函數(shù)時,它不認(rèn)識 as[i] 是什么東西;

首先明確一點(diǎn):this是指對當(dāng)前對象的引用,這是JS語法規(guī)定。

從你的代碼可以看出,this是指?li 對象(假定你的 as[i] 是一個 li 對象),而 onmouseover 調(diào)用的是匿名方法,即onmouseover=function(){...},這是簡寫,語法規(guī)定可以這么寫:

as[i].onmouseover=function(){
????this.style.background='grey';//這里用as[i]代替this就不會改變背景色
}

現(xiàn)在,我們把它的具體引用寫出來,假定這個方法被聲明為 changBg(),那么就是:

as[i].onmouseover=changeBg();

function?changeBg(){
????this.style.background='grey';//this是指對當(dāng)前對象的引用,這是JS語法規(guī)定。
}

//當(dāng)我們?this?改為?as[i]?的時候,
function?changeBg(){
????as[i].style.background='grey';//?as[i]?在這個方法內(nèi)是什么?as[i]?既不是全局變量,也不是方法內(nèi)的局部變量,所以它不會被識別出來,從而導(dǎo)致這條代碼無法實現(xiàn)功能
}

當(dāng)然,我也是初學(xué)者,以上是我的理解,不敢保證100%正確,希望能幫到你。: )

2 回復(fù) 有任何疑惑可以回復(fù)我~
#1

二師弟 提問者

哦哦哦哦哦!雖然還不太明白變量的作用域混淆是怎么一回事,但是你后面這么一說,突然就明白了一些!好厲害!謝謝你~
2016-03-31 回復(fù) 有任何疑惑可以回復(fù)我~
#2

latency

不是這個原因,下面FANR說的才是正確原因
2016-08-05 回復(fù) 有任何疑惑可以回復(fù)我~

這與閉包有關(guān),i是綁定在其作用域所在的函數(shù),在循環(huán)的額每次迭代中,循環(huán)體都會為嵌套函數(shù)(這里是mouseover的事件處理程序)創(chuàng)建一個閉包,而閉包存儲的是變量i的引用,由于每次迭代后,i的值均在變化,因此內(nèi)部函數(shù)最終得到的就是i最后的值(as.length)。

參考這個問題:https://segmentfault.com/q/1010000002959308

0 回復(fù) 有任何疑惑可以回復(fù)我~

因為這個不是按下鍵盤再進(jìn)行循環(huán)的,是先進(jìn)行循環(huán)對所有對象添加了事件然后你再進(jìn)行操作調(diào)用這個事件,當(dāng)你按下事件的時候循環(huán)中的i值已經(jīng)大于as.length了

2 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消

在鼠標(biāo)遍歷的時候為什么必須用this?

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號