關(guān)于第10章編程挑戰(zhàn)參考代碼中的問題
下面這段:
window.onload = function(){
? ? ? ? ? ? ?var oTab = document.getElementById("tabs");
? ? ? ? ? ? ?var oUl = oTab.getElementsByTagName("ul")[0];
? ? ? ? ? ? ?var oLis = oUl.getElementsByTagName("li");
? ? ? ? ? ? ?var oDivs= oTab.getElementsByTagName("div");
? ? ? ? ? ? ?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 = "on";
? ? ? ? ? ? ? ? ? ? ?oDivs[this.index].className = "";
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ?}
? ? ? ? ?}
最后部分: ? this.className="on";
? ? ? ? ? ? ? ? ? ? ?oDivs.[this.index].className="";
為什么不能把this.className換成oLis[i].className?難道不是一樣的效果嗎?(我已經(jīng)測(cè)試過換了之后會(huì)出錯(cuò))
同樣的為什么不能把oDivs.[this.index]換成oDivs.[i].className呢?
2016-10-01
我的理解是在oLis[i]的onclick方法在被調(diào)用時(shí)已經(jīng)不在變量i的作用域中了。
變量i位于window.onload中的for循環(huán)里,你說的那兩個(gè)語句在for循環(huán)中被定義成函數(shù)綁定給了onclick,但這時(shí)onclick沒有被調(diào)用。而在onclick在被調(diào)用時(shí)for循環(huán)所處的window.onload已經(jīng)執(zhí)行結(jié)束了。