执行完onclick方法后,为什么标签就显示未定义了呢??

菜鸟M 2020-09-22 08:22:51





如上图:
在我执行 links[i] .onclick 方法之前,输出 links[i] 还是正常的 a 标签元素
但是
当我执行完 onclick方法之后,我再输出 links[i] 之后,就之前输出 undefine 未定义了! 这是为什么呢??????求教
...全文
23140 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
泡泡鱼_ 2020-10-17
  • 打赏
  • 举报
回复
呵呵,这应该是初学者往往都会碰到的第一个经典的闭包函数了。"按你原本的意图"说一个方法吧,在函数内部就可以直接获取到它本身的索引了,不用在外面定义.index=i;当然内部this的指向依然是当前触发事件的对象本身

for(var i = 0;i < links.length; i++){
      links[i].onclick =  function(idx){
        return function(){
          console.log(idx);
          console.log(links[idx].innerHTML);
        }
      }(i)
    }
Luz_zhen 2020-10-17
  • 打赏
  • 举报
回复
用var i会被提升到顶部 而onclick 方法是for循环结束后被触发的 这是i已经是 length+1了 所以打印出来的是undefined,这是一个经典的闭包问题
菜鸟M 2020-10-09
  • 打赏
  • 举报
回复
用let的块作用域是不会出问题的,以后还是杜绝用var 吧~~~
soul_reader 2020-10-09
  • 打赏
  • 举报
回复
定义循环的时候用let 试试呢,别用var
weixin_50944805 2020-09-29
  • 打赏
  • 举报
回复


// 你这样做
for(...){

links[i].index = i
links[i].onclick = function(){

  console.log(this); // 等于当前对象 也可以 links[this.index]
  console.log(this.index); // 等于当前对象的i值
}

}

菜鸟M 2020-09-29
  • 打赏
  • 举报
回复
这个解决了,分享一下,在onclick里面 i 始终是等于 liks.length的, 所以是未定义的!!!!!!!!!!可以用this替代!!!!!

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧