黑马程序员技术交流社区

标题: js中for循环和事件 [打印本页]

作者: lyq200747872    时间: 2019-6-6 13:45
标题: js中for循环和事件
本帖最后由 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属性。

TIM图片20190605201434.png (3.08 KB, 下载次数: 3)

TIM图片20190605201434.png

TIM图片20190605201423.png (8.18 KB, 下载次数: 5)

TIM图片20190605201423.png

TIM图片20190605201443.png (6.87 KB, 下载次数: 3)

TIM图片20190605201443.png

TIM图片20190605201440.png (2.44 KB, 下载次数: 4)

TIM图片20190605201440.png

TIM图片20190605201450.png (2.64 KB, 下载次数: 4)

TIM图片20190605201450.png

TIM图片20190605201457.png (8.08 KB, 下载次数: 3)

TIM图片20190605201457.png





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2