问题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方式只能为元素绑定一个点击事件,后续的绑定只会覆盖而不会追加,问题不在循环,在于事件绑定的方式