0
4

1 回答 1

2

尝试用if此代码替换的主体。

        aTags[i].addEventListener("mouseover", (function(source, fragment)
        {
            return function()
            {
                if (this.title == "")
                {
                    (providers[source])(this, fragment);
                }
            }
        })(data[1], data[2]), false) ; 

注意循环完成后 do aTags = null;

您的问题是 if 语句块不是真正的范围,任何 var'd 都将属于外部函数范围。因此,您作为事件处理程序提供的内部函数将使用最后一次传递的源、链接和片段。另外,通过维护对 DOM 对象的引用,由于循环引用,您会出现内存泄漏。

上述方法通过函数调用在每次传递时创建一个新范围,因此每个源和片段都在其自己的范围内。它还使用了这样一个事实,即称为事件侦听器的函数具有this指向它所附加的元素的属性,因此避免了包含 DOM 元素的循环引用。

于 2009-01-09T11:26:03.690 回答