已为小白,啥都不懂 2022-01-26 15:09 采纳率: 98%
浏览 100
已结题

看下以下代码为何会出错误


<body onload="init()">
    <p>1</p>

    <p>2</p>

    <p>3</p>

    <p>4</p>

    <p>5</p>
</body>

<script>
      var pAry = document.getElementsByTagName('p');

      function init(){
          for(var i=0;i<pAry.length;i++){
              pAry[i].i = i;
              pAry[i].onclick =function () {
                  console.log(pAry[i].i)
              };
          }
      }
</script>

代码倒数第五行 为什么我这样写浏览器会报Cannot read property 'i' of undefined
而换成this之后 就能正常运行
这两者的区别在哪?

  • 写回答

4条回答 默认 最新

  • 几何心凉 2022年度博客之星前端领域TOP 1 2022-01-26 15:26
    关注
    
     pAry[i].onclick =function () {
          console.log(pAry[i].i)
      };
    

    //引用的i是他父函数init函数的变量i,init里的函数i经过循环后值变成了5,pAry[i]就数组越界了,越界了就是undefined

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月4日
  • 已采纳回答 1月27日
  • 创建了问题 1月26日

悬赏问题

  • ¥15 汇编语言没有主程序吗?
  • ¥15 这个函数为什么会爆内存
  • ¥15 无法装系统,grub成了顽固拦路虎
  • ¥15 springboot aop 应用启动异常
  • ¥15 matlab有关债券凸性久期的代码
  • ¥15 lvgl v8.2定时器提前到来
  • ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)
  • ¥15 cam_lidar_calibration报错
  • ¥15 拓扑学,凸集,紧集。。
  • ¥15 如何扩大AIS数据容量