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

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

特別不明白這里的this是什么??為什么要這么用??

for(var i=0;i<oLis.length;i++){

? ? ? ? oLis[i].index=i;

? ? ? ? oLis[i].onclick=function(){

? ? ? ? ? for(var n=0;n<oLis.length;n++){

? ? ? ? ? ? ? oLis[n].className="";

? ? ? ? ? ? ? oDivs[n].className="hide";

? ? ? ? ? }

? ? ? ? ? this.className="on";

? ? ? ? ? oDivs[this.index].className="";

? ? ? ? }

? ? }

看到有人解釋為調用函數的對象,那這里調用函數的對象是oLis[i],為什么把this換成oLis[i]卻布恩那個正常顯示呢?

oDivs[this.index].className="";里面的this.index為什么不能直接寫成i呢??

正在回答

4 回答

發生點擊事件的當前對象

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

這里的 ? this.className="on";?oDivs[this.index].className=""跟這兩句都是在點擊事件的function()里面引發,而外面的for循環i的值在點擊事件的函數體里面是調用不到的,所以要在定義一個變量來存放i的值,然后當點擊事件產生的時候我們就可以調用到index的值也就是i的值,你可以試下在函數體里面alert(i);把i的值打印出來看下,你會發現都是-1,因為i根本就不在,這個我就忘記跟剛才那個人說了。

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

慕粉1469604703 提問者

這里的返回值應該是3吧。。。
2016-09-12 回復 有任何疑惑可以回復我~
#2

慕粉1469604703 提問者

非常感謝,好像有一點兒明白了。
2016-09-12 回復 有任何疑惑可以回復我~
#3

小丑魚yang

我們想要的返回值就是i的值,可是function里面是調用不到i的值的,所以我們只能定義一個變量來存放i的值。
2016-09-12 回復 有任何疑惑可以回復我~

就是當前這個調用對象

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

for里面如果嵌套有函數,那么在那個函數里面的 i 實際上的值就等于 oLis.length?

所以,在那個函數里面oLis[i] 一直都是最后一個,這樣就得不到想要的結果了。

用this的話就能避免這個問題,因為this就是當前調用它的對象

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

劉毅毅

請問為什么for嵌套函數會這樣?還有就是這里是onlick觸發的函數,沒有觸發時函數會不會隨著for循環運行呢?
2016-11-13 回復 有任何疑惑可以回復我~
#2

湛心 回復 劉毅毅

為什么用this而不用i,主要是一個作用域的問題,等你學會作用域,你的問題就不需要我解釋了
2016-11-16 回復 有任何疑惑可以回復我~
#3

劉毅毅 回復 湛心

哦。這個問題差不多知道了。正在學習中
2016-11-16 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

特別不明白這里的this是什么??為什么要這么用??

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

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

幫助反饋 APP下載

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

公眾號

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