在鼠標(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呢?
2016-03-30
問題在于:對于變量的作用域混淆,原因:當(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ī)定可以這么寫:
現(xiàn)在,我們把它的具體引用寫出來,假定這個方法被聲明為 changBg(),那么就是:
當(dāng)然,我也是初學(xué)者,以上是我的理解,不敢保證100%正確,希望能幫到你。: )
2018-01-20
這與閉包有關(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
2016-03-30
因為這個不是按下鍵盤再進(jìn)行循環(huán)的,是先進(jìn)行循環(huán)對所有對象添加了事件然后你再進(jìn)行操作調(diào)用這個事件,當(dāng)你按下事件的時候循環(huán)中的i值已經(jīng)大于as.length了