本帖最后由 lyq200747872 于 2019-6-6 13:50 编辑
实际执行顺序
for 循环里面给 trs的每一个元素的 onmouseover事件设置为一个匿名函数,而这个函数在 for 循环阶段是还没有执行的(等到鼠标移动到元素对象上时才会触发 onmouseover事件执行),匿名函数里面的 trs 保存着对 i 的引用,注意只是保存着引用,没有把当前 i 的值直接赋值到每个 trs。
随后 for 循环执行完毕,正常情况下执行完 for 循环,i 就会被垃圾回收器回收,但是这里匿名函数保存了对 i 的引用,所以 i 没有被回收,执行完 for 循环后,i = trs.length,还继续留着内存里。
而当移动后触发 onmouseover事件时,被赋值给 onmouseover的匿名函数被执行,这时候开始把 i 的值赋值给匿名函数,而此时 for 循环已经执行完毕,i = trs.length,trs 当然是 undefined了,也就无法给trs添加className属性。 |
组图打开中,请稍候......
|