A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lyq200747872 初级黑马   /  2019-6-6 13:45  /  757 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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属性。
更多图片 小图 大图
组图打开中,请稍候......

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马