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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

循環問題中索引求解

循環問題中索引求解

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 = "";? ? ? ? ? ? ? ? ?}? ? ? ? ? ? ?};為什么要用到索引?直接這樣為什么不行?for(var i= 0,len = oLis.length;i<len;i++){? ? ? ? ? ? ? ? ?oLis[i].onclick = function() {? ? ? ? ? ? ? ? ? ? ?for(var n= 0;n<len;n++){? ? ? ? ? ? ? ? ? ? ? ? ?oLis[n].className = "";? ? ? ? ? ? ? ? ? ? ? ? ?oDivs[n].className = "hide";? ? ? ? ? ? ? ? ? ? ?}? ? ? ? ? ? ? ? ? ? ?this.className = "on";? ? ? ? ? ? ? ? ? ? ?oDivs[i].className = "";? ? ? ? ? ? ? ? ?}? ? ? ? ? ? ?};
查看完整描述

1 回答

?
堂堂堂堂糖糖糖童鞋

TA貢獻101條經驗 獲得超58個贊

你可以自己嘗試分析一下執行過程。
這里我說一下,先進行遍歷,同時為oLis[i]綁定點擊事件監聽,
然而,for循環執行完畢后,點擊事件并未出發,而i的值變為oLis.length,因為i為全局作用域變量

當我們觸發點擊事件時,執行回調函數,此時是執行的是

oLis[i].onclick?=?function()?{
????//此時i已經變為了oLis.length
?????oDivs[oLis.length].className?=?"";
},

所以,需要保存當前遍歷添加監聽元素的下標到元素的index屬性中,方便在之后查找到對應得元素。

可以這樣寫:

for(var?i=?0,len?=?oLis.length;i<len;i++){
??????(function(i){//IIFC(即時執行函數,并隔離i的作用域)
???????????oLis[i].onclick?=?function()?{
?????????????????????for(var?n=?0;n<len;n++){
?????????????????????????oLis[n].className?=?"";
?????????????????????????oDivs[n].className?=?"hide";
?????????????????????}
?????????????????????this.className?=?"on";
?????????????????????oDivs[i].className?=?"";
?????????????????}
??????})(i)
?};

ES6的話:

for(let?i=?0,len?=?oLis.length;i<len;i++){//塊級作用域聲明let,存在兼容性,了解即可
???????oLis[i].onclick?=?function()?{
????????????for(var?n=?0;n<len;n++){
?????????????????oLis[n].className?=?"";
?????????????????oDivs[n].className?=?"hide";
?????????????}
?????????????this.className?=?"on";
?????????????oDivs[i].className?=?"";
????????}
?};


查看完整回答
反對 回復 2016-10-12
  • 1 回答
  • 0 關注
  • 1137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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