猿问

我想问下,以下这段代码中加粗的this为什么不能替换成oli[i]呢

window.onload=function() {
   var oli = document.getElementsByTagName("li");
   var i = 0;

   for (i = 0; i < oli.length; i++) {
       oli[i].index = i;
       oli[i].onmouseover = function () {
          
           this.style.background = "url(xz.gif) no-repeat 0 0";


           
           }

     
       
   }

}

慕田峪8701529
浏览 1245回答 3
3回答

风筝_0010

    在JS的预解释阶段,也就是这个函数执行之前都会被当做字符串存到内存里面。如果换成oli[i],这个i是一个引用,所以你触发mouseover事件的时候会根据沿着作用域查找i,但是for循环里面的i已经是oli.length了,所以这样会你打印出来的全部都是"提交成功(oli.length+1)分",但是如果是this,这样函数运行的时候会查找this的值,发现this指向你鼠标划过的li,所以这个时候正好就对应了。function () {     alert("提交成功" + (this.index + 1) + "分"); }

后知后觉88

for (let i=0;i<oli.length;i++){}  用let定义就可以了
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答