在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ (筆試題)下面程序有什么問(wèn)題,怎么修改?

(筆試題)下面程序有什么問(wèn)題,怎么修改?

<body>
  <ul>
    <li>test1</li>
    <li>test2</li>
    <li>test3</li>
  </ul>
  
  <script>
      var lis = document.querySelectorAll("ul li");
      for(var i = 0,len = lis.length; i < len; i++){
        lis[i].addEventListener('click',function(){
           console.log(i);
        },false);
      }
  </script>
</body>
回答
編輯回答
懶豬

js點(diǎn)擊標(biāo)簽實(shí)現(xiàn)變色,思路有點(diǎn)問(wèn)題求指正!,
這類(lèi)問(wèn)題比較經(jīng)典,我在這個(gè)問(wèn)題下回答了四種方案。可供參考。

2017年7月14日 06:45
編輯回答
神曲

js的塊級(jí)作用域問(wèn)題,在你點(diǎn)擊時(shí),for已經(jīng)完成循環(huán),此時(shí)i為3
1.var 改成let

 for(let i = 0,len = lis.length; i < len; i++){
        lis[i].addEventListener('click',function(){
           console.log(i);
        },false);
      }

2.加個(gè)閉包

   for(var i = 0,len = lis.length; i < len; i++){
          (function(i){
            lis[i].addEventListener('click',function(){
           console.log(i);
        },false);
          })(i)   
      }

3.給每個(gè) lis[i]一個(gè)自定義屬性把i暫存起來(lái)

  for(var i = 0,len = lis.length; i < len; i++){
          lis[i].index = i;
        lis[i].addEventListener('click',function(){
           console.log(this.index);
        },false);
      }
2017年7月31日 14:03
編輯回答
冷溫柔

有2個(gè)問(wèn)題。

  • 第一個(gè)問(wèn)題就是性能不好。假設(shè)以后里面的li有1000個(gè),你每一個(gè)都綁定一個(gè)事件,會(huì)占用大量?jī)?nèi)存。推薦使用事件委托。代碼示例如下:
var ul = document.querySelector('ul');
ul.addEventListener('click',function(e){
    alert(e.target.innerText);
 });

如果面試官非要點(diǎn)擊彈出li的相對(duì)順序的話,改成下面的代碼即可

var lis = document.querySelectorAll("ul li");
var ul = document.querySelector('ul');
for(let i = 0,len = lis.length; i < len; i++){
  lis[i].index  = i
}
ul.addEventListener('click',e => {
    alert(e.target.index);
});
  • 第二個(gè)問(wèn)題就是點(diǎn)擊所有l(wèi)i,輸出結(jié)果都是3??梢詤⒖寄奥贩哺璧拇鸢?,可以把代碼改成es6方便裝逼
// 使用es6的let和箭頭函數(shù)
for(let i = 0; i < lis.length; i++){
   lis[i].addEventListener('click',() => {
     alert(i);
   },false);
}
2017年12月6日 00:58