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

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

求助,關(guān)于for循環(huán)中的函數(shù)

?for(var i= 0,len = xli.length;i<len;i++){

xxx(i);

}

function xxx(i){

xli[i].onclick=function(){

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

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

? ? ? ? ? ? ? ? ? ? ? ? ?xDivs[n].className = "cont";

}

xli[i].className = "on";

xDivs[i].className="";

}?

? ?}

}

如上代碼是可行的。但是將xxx這個函數(shù)替換掉xxx(i)位置就不可行了。什么原因呢?

正在回答

4 回答

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

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

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

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

? ? ? ? ? ?xDivs[n].className = "cont";

? ? ? ?}

? ? ? ?xli[i].className = "on";

? ? ? ?xDivs[i].className="";

? ?}

}這是你想改成的代碼吧


先說一下for循環(huán)的時候做了什么吧,給每一個li綁定了一個onclick事件,然后for循環(huán)就結(jié)束了


,到這里一切都正常


問題出在onclick觸發(fā)時,


xli[i].className = "on";


xDivs[i].className="";


執(zhí)行上述2個語句,i是多少,由于本身onclick事件綁定的匿名函數(shù)里沒有i的相關(guān)定義,按照作


用域鏈,向上一級查找i,這時在for循環(huán)里找到i的定義,此時i是多少呢,由于for循環(huán)早就跑完


了,onclick事件也早綁完了,所以i是len-1,到此,就錯誤了。


那么提問那種方法為什么沒錯,因為把i作為參數(shù),在傳參的過程中給保存了,每一個li對應(yīng)的i


值都被保存了,保存在函數(shù)xxx的參數(shù)i里,防止2個i你分不清楚,我給改寫一下你看的明白。


function xxx(obj){//參數(shù)obj保存了當(dāng)時i的值


xli[i].onclick=function(){//綁定事件時,i向上從for循環(huán)里取當(dāng)時的i值


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


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


? ? ? ? ? ? ? ? ? ? ? ? ?xDivs[n].className = "cont";


}


xli[obj].className = "on";//觸發(fā)事件后,找obj的值,向上一級查找,找到參數(shù)obj,值為當(dāng)時i的



xDivs[obj].className="";


}?


? ?}


到此,就是說,想要不出現(xiàn)i值錯誤,就要保存一下i值,上面那種作為參數(shù)保存是一種,標(biāo)準(zhǔn)答


案提供的是另一種


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

? ?xli[i].obj=i;//給li自定義了一個obj屬性,保存當(dāng)時的i值,每一個li都有一個obj屬性,來


保存對應(yīng)的i值

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

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

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

? ? ? ? ? xDivs[n].className = "cont";

? ? ? }

? ? ? ?this.className = "on";//this為觸發(fā)onclick的li

? ? ? ?xDivs[this.obj].className="";//this.obj值為觸發(fā)onclick的li當(dāng)時的i值

? }

}


還有很多種方法,比如i值保存在函數(shù)屬性里,比如i值保存在一個局部變量里,重點都在于把每


個li對應(yīng)的i值給保存住,js有一個重要知識點叫做閉包,也可以用來保存i值,這里不做多講,


可以自己查詢了解一下。


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

Original121 提問者

非常感謝!for循環(huán)跑完后i應(yīng)該等于len吧?
2016-05-03 回復(fù) 有任何疑惑可以回復(fù)我~
#2

kuban 回復(fù) Original121 提問者

for內(nèi)最后一個i是len-1,出去就是len了 for循環(huán),滿足第二條件執(zhí)行花括號內(nèi)內(nèi)容,執(zhí)行完畢i再加1,所以最后一個for花括號內(nèi)的i值是len-1,執(zhí)行完畢時是len,不符合for循環(huán)第二條件,不再進(jìn)入循環(huán),下面附一小段代碼,可以給你自己嘗試一下看值。
2016-05-03 回復(fù) 有任何疑惑可以回復(fù)我~

這時在for循環(huán)里找到i的定義,此時i是多少呢,由于for循環(huán)早就跑完


了,onclick事件也早綁完了,所以i是len-1,到此,就錯誤了。

就是這句話,不是很明白。。。

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

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

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

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

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

? ? ? ? ? ?xDivs[n].className = "cont";

? ? ? ?}

? ? ? ?xli[i].className = "on";

? ? ? ?xDivs[i].className="";

? ?}

}這是你想改成的代碼吧

這個i并沒有執(zhí)行完吧,都是從0開始的呀。xli[0],xli[1]....依次往后的呀

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

<!DOCTYPE html>
<html>
<head lang="en">
? ?<meta charset="UTF-8">
? ?<title></title>
</head>
<body>
for循環(huán)內(nèi)的i值:<input class="f1" /><br>
for循環(huán)外的i值:<input class="f2" />
<script>
? ?(function a(){
? ? ? ?for(var i=0;i<5;i++)
? ? ? ?{
? ? ? ? ? ?var f1=document.getElementsByClassName("f1");
? ? ? ? ? ?f1[0].value=i;
? ? ? ?}
? ? ? ?var f2=document.getElementsByClassName("f2");
? ? ? ?f2[0].value=i;
? ?})();
</script>
</body>
</html>

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

Original121 提問者

嗯,thank you
2016-05-03 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消

求助,關(guān)于for循環(huán)中的函數(shù)

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

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

幫助反饋 APP下載

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

公眾號

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