for循环与onclick

问题1.
在这里插入图片描述

上述代码执行后报错:“choose[i] is undefined”。请分析原因。
解释.
在这里插入图片描述

将for循环进行拆解

在这里插入图片描述

实际执行顺序
for 循环里面给 choose 的每一个元素的 onclick 事件设置为一个匿名函数,而这个函数在 for 循环阶段是还没有执行的(等到点击时才会触发 onclick 事件执行),匿名函数里面的 choose[i] 保存着对 i 的引用,注意只是保存着引用,没有把当前 i 的值直接赋值到每个 choose[i]。

随后 for 循环执行完毕,正常情况下执行完 for 循环,i 就会被垃圾回收器回收,但是这里匿名函数保存了对 i 的引用,所以 i 没有被回收,执行完 for 循环后,i = choose.length,还继续留着内存里。

而当点击后触发 onclick 事件时,被赋值给 onclick 的匿名函数被执行,这时候开始把 i 的值赋值给匿名函数,而此时 for 循环已经执行完毕,i = choose.length,choose[i] 当然是 undefined了,也就无法读取 checked 属性了。

问题2.
在这里插入图片描述

为什么第二段代码,结果只弹出一个5
该循环给同一元素添加了5次点击事件的绑定,但onclick方式只能为元素绑定一个点击事件,后续的绑定只会覆盖而不会追加,问题不在循环,在于事件绑定的方式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一斤阳光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值