Skip to main content
 首页 » 编程设计

jquery之重用 jQuery 对象速度更快,但它总是更好吗

2026年07月28日5mq0036

我在工作中遇到了一些代码,如下所示:

var $divs = $('div'); 
var $jq   = $([1]); 
 
$divs.each(function () { 
    $jq.context = $jq[0] = this; 
    // ... do stuff ... 
}); 

我perf'd上面的内容,看起来比在函数顶部放置 $this = $(this); 快得多。在函数内部,$jq 变量具有一系列标准的典型 jQuery 方法(.hasClass()、.data()、.find()、...),代码按预期工作。

我想知道这里的权衡是什么;即,如果不每次都构建一个新对象,你会失去什么?我只是失去了“历史”(即 .pushStack()、.end()、.andSelf()、...)吗?我应该一直这样做吗?

此外,这是命名模式吗?我怎么也想不出如何在 Google 上研究这个问题。

请您参考如下方法:

这让我觉得这是一个疯狂的微观优化。当然,在基本情况下,重用对象的速度要快一个数量级。但缓存当前对象的全部目的是为了节省后续操作的时间;在宏伟的计划中,除非您正在处理数十万元素(不要这样做),否则这并不重要。

你失去了什么

  1. 合理范围:通过将对象存储在迭代的外部范围中,您将破坏回调的闭包。一个明显的例子是,如果您在此处 console.log($jq) ,则所有日志条目都将引用同一个对象(循环中的最后一个对象),而不是 this 每次迭代都是唯一的。

  2. 可读性:var $this = $(this) 的读取/理解速度比 $jq.context = $jq[ 0] = 这个。

关于“历史”,我不明白你会在这里失去什么。无论哪种情况,您都从特定对象开始,因此您从那里进行的任何搜索都将被记录为相同的。