为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪8701529 2017-05-10 22:02:27
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";                      }                }}
查看完整描述

3 回答

?
风筝_0010

TA贡献45条经验 获得超15个赞

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

function () {
    alert("提交成功" + (this.index + 1) + "分");
}


查看完整回答
1 反对 回复 2017-05-10
?
后知后觉88

TA贡献39条经验 获得超10个赞

for (let i=0;i<oli.length;i++){}  用let定义就可以了


查看完整回答
反对 回复 2017-05-10
  • 3 回答
  • 1 关注
  • 1244 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信