【发布时间】:2011-07-03 18:52:45
【问题描述】:
JQuery 版本
jQuery JavaScript 库 v1.4.4
问题
解决方案可能很明显,但我摸不着头脑。
问题是在进行一些代码优化时,我遇到了一个在 jquery 元素上调用 append 几次的循环,这是一个相当大的循环。所以它看起来像这样:
var list_of_goodies = [1,2,3,...];
$.each(list_of_goodies, function(val) {
$('div.toaddto').append(val);
...some more code...
$('div.toaddto').append(otherval);
});
正如你所看到的并没有真正优化,所以我尝试使用函数指针,所以它看起来像这样:
var list_of_goodies = [1,2,3,...];
var toaddtoAppend = $('div.toaddto').append;
$.each(list_of_goodies, function(val) {
... the other code...
toaddtoAppend(val).append(otherval);
});
这似乎不是一个巨大的优化,但它是一个很大的列表,这可以节省大量查找时间,尤其是在较旧的 IE 中。 然而,这会导致错误。
错误
this.domManip 不是函数
不幸的是,这是来自缩小的 jQuery,因此没有更多信息,但它似乎发生在 wrapInner() 中。
问题
这是范围问题还是参考问题?我在没有使用 jQuery 的情况下对其进行了测试,并且函数指针有效。
$.each 或 for 循环最终得到相同的结果。有人知道我在这里哪里出错了吗? 我对 javascript 如何处理函数指针知之甚少,尤其是当它们应该与某个事物的实例相关联而不是静态的时,所以请原谅这里的任何无知。
经过测试的浏览器
- 火狐3.6
- IE 6、7 和 8
- Chrome 9.0.something
无论浏览器如何,结果总是相同的,这似乎表明不是浏览器如何处理导致它中断的指针。
自己测试
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
var iterables = [];
for (var i = 0; i < 1000; i++) iterables.push(i);
var divAppend = $('#test').append;
$.each(iterables, function(val) {
divAppend(val);
});
});
</script>
</head>
<body>
<div id="test"></div>
</body>
</html>
谢谢, 神经元
【问题讨论】:
标签: javascript jquery function-pointers