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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(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這個(gè)函數(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)的時(shí)候做了什么吧,給每一個(gè)li綁定了一個(gè)onclick事件,然后for循環(huán)就結(jié)束了


,到這里一切都正常


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


xli[i].className = "on";


xDivs[i].className="";


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


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


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


那么提問那種方法為什么沒錯(cuò),因?yàn)榘裪作為參數(shù),在傳參的過程中給保存了,每一個(gè)li對(duì)應(yīng)的i


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


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


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


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


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


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


}


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



xDivs[obj].className="";


}?


? ?}


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


案提供的是另一種


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

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


保存對(duì)應(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)時(shí)的i值

? }

}


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


個(gè)li對(duì)應(yīng)的i值給保存住,js有一個(gè)重要知識(shí)點(diǎn)叫做閉包,也可以用來保存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)最后一個(gè)i是len-1,出去就是len了 for循環(huán),滿足第二條件執(zhí)行花括號(hào)內(nèi)內(nèi)容,執(zhí)行完畢i再加1,所以最后一個(gè)for花括號(hào)內(nèi)的i值是len-1,執(zhí)行完畢時(shí)是len,不符合for循環(huán)第二條件,不再進(jìn)入循環(huán),下面附一小段代碼,可以給你自己嘗試一下看值。
2016-05-03 回復(fù) 有任何疑惑可以回復(fù)我~

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


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

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

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="";

? ?}

}這是你想改成的代碼吧

這個(gè)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ù)我~

舉報(bào)

0/150
提交
取消
JavaScript進(jìn)階篇
  • 參與學(xué)習(xí)       468767    人
  • 解答問題       22442    個(gè)

本課程從如何插入JS代碼開始,帶您進(jìn)入網(wǎng)頁動(dòng)態(tài)交互世界

進(jìn)入課程

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

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

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

幫助反饋 APP下載

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

公眾號(hào)

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