rjray
问问题
2368 次
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 回答