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

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

為什么把this換成oList[i]就不行?

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

? ? {

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

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

? ? ? ?{

? ? ? ? ?for(var n= 0;n<len;n++)

? ? ? ? ?{

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

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

? ? ? ? ?}

? ? ? ? this.className = "li1";

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

? ? ? ?}

? ? };


正在回答

3 回答

? 因為頁面一旦加載完成就觸發onload事件,而onclick事件觸發之前,for(var i= 0,len = oLis.length;i<len;i++)這個循環已經運行完成了!oLis[i].onclick = function()這段代碼只是掛在那里(掛這個詞不怎么準確,意思放在那里,等待onclick事件觸發),這時候的i=3.在 oLis[i].onclick = function()之前document.writeln(i)你會發現輸出012,說明循環已經完成.
?? oLis[i].index = i 的作用只是在循環的過程中綁定下標i(0 1 2)到oLis數組相應元素oLis[0] oLis[1] oLis[2]的index變量上(例如oLis[0].index = 0;oLis[1].index =1;oLis[2].index=2)

?? 當onclick事件觸發的時候,this.className中的this就是當前鼠標所在的元素(例如家居), 同時oDivs[this.index]會獲取到家居所對應的oLis數組中的index值(這里是1,因為我們已經在完成的循環中將oLis[1]=1 了),而如果換成oLis[i]則因為i===3(恒等于3),所以oLis[i]===oLis[3],當然會出錯了!建議好好看一下JS的閉包原理和事件機制!


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

按理說 OLis在windoe.onload{}內部是全局變量

應該在內層函數中也能用啊

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

this指當前元素,而在循環體中oLis[i]有一個事件,而這個事件調用的函數中并沒有參數,所以會出現這樣的結果,如果想在函數調用某個變量的時候,要不就是在該函數中有這個變量,要不就是將這個變量作為參數傳遞到函數中

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

thenger

哪像全局變量這類參數在函數體中如果沒有特別聲明也不能使用?
2015-02-21 回復 有任何疑惑可以回復我~
#2

Ambition_zl

不對吧,依你這么說 OLis[n]也沒定義,也不能用啊
2015-03-13 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么把this換成oList[i]就不行?

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

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

幫助反饋 APP下載

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

公眾號

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