快捷导航

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

window.onload=function() {  var oli = document.getElementsByTagName("li");  var i = 0;  for (i = 0; i < oli.length; i++) {    oli.index = i;    oli.onmouseover = function () {          this.style.background = "url(xz.gif) no-repeat 0 0";          }       }}

免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。

版权声明:作者保留权利,不代表本站立场。

回复

使用道具 举报

参与会员2

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

使用道具 举报

for (let i=0;i
回复

使用道具 举报

可能感兴趣的问答

发新帖
  • 微信访问
  • 手机APP