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

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

UMD判斷amd和commonJS有先后順序嗎?

UMD判斷amd和commonJS有先后順序嗎?

藍山帝景 2018-09-03 08:17:32
   <ul>         <li>0</li>         <li>1</li>         <li>2</li>         <li>3</li>     </ul>var nodeList = document.getElementsByTagName('li');for(var i = 0;i < nodeList.length;i++){             nodeList[i].onclick = function(){                     console.log(i);     } } 這里每個li的onclick觸發后 都會輸出4 ,因為console.log(i)只是對i變量的引用 如果改成一下代碼:for(var i = 0;i < nodeList.length;i++){     nodeList[i].num = i;     nodeList[i].onclick = function(){                     console.log(this.num);     } } 可以正常輸出0,1,2,3  猜測原因是在為li創建onclick事件的同時創建屬性num所以num和onclick都是屬于li的一部分, 那么再變化一下代碼for(var i = 0;i < nodeList.length;i++){    var num = i;     nodeList[i].onclick = function(){                     console.log(num);     } } 這里依然會輸出4,如果說是因為引用了num,而num又引用了i  那么,為什么以nodeList[i].num = i 的可行?  為li創建了屬性num的同時  nodeList[i].num = i 算是對i的引用還是賦值?
查看完整描述

1 回答

?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

你這樣的學習方法真的太可怕啦!.

閉包會都輸出4的原因是, 函數定義時并不執行.

var nodeList = document.getElementsByTagName('li');for(var i = 0;i < nodeList.length;i++){        
    nodeList[i].onclick = function(){            
        console.log(i);
    }
}

之所以輸出的全部是3, 是因為li綁定的事件處理函數在定義時并未執行, 當你觸發li的點擊事件時函數執行, 此時的i是3,當然會輸出3.

for(var i = 0;i < nodeList.length;i++){
    nodeList[i].num = i;
    nodeList[i].onclick = function(){            
        console.log(this.num);
    }
}

為li增加一個屬性, 為num屬性賦值是在什么時候發生的? 他并沒有放到函數里, 所以這個語句直接就執行啦. 此時i就分別為0,1,2,3, 等事件處理函數執行的時候, 輸出的是對應li的num值, 而這個時候的num已經在上一步就為其賦值啦. 當然會輸出0,1,2,3

for(var i = 0;i < nodeList.length;i++){    var num = i;
    nodeList[i].onclick = function(){            
        console.log(num);
    }
}

這個是因為, num變量被覆蓋了值.
假設代碼改成這樣:

var num;for(var i = 0;i < nodeList.length;i++){
    if(i === 1) {
        num = i;
    }
    nodeList[i].onclick = function(){            
        console.log(num);
    }
}

你說他會輸出什么?

我說的學習方法可怕, 是你不好好看書, 理解他的真義. 就這樣鉆這些牛角尖. 是會出事兒的.


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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