链接jQuery选择器是否有任何负面影响?

链接jQuery选择器是否有任何负面影响?,jquery,performance,jquery-selectors,chaining,Jquery,Performance,Jquery Selectors,Chaining,在选择器上链接jQuery API调用是否有任何负面影响? 我特别感兴趣的是处理性能、设计、易受内存泄漏影响的负面影响 那么,链接这样的语句: $('.myElement').css('color','green') .attr('title','My Element') .click(function(){ console.log('clicked') }); 是否让应用程序受到上述任何负面影响的影响 我个人对链接jQuery表达式

在选择器上链接jQuery API调用是否有任何负面影响? 我特别感兴趣的是处理性能、设计、易受内存泄漏影响的负面影响

那么,链接这样的语句:

$('.myElement').css('color','green')
               .attr('title','My Element')
               .click(function(){ console.log('clicked') });
是否让应用程序受到上述任何负面影响的影响


我个人对链接jQuery表达式没有任何问题,但我见过很多人抨击链接,我想知道避免链接是否有任何具体好处,或者这只是可读性和个人风格的问题。

链接实际上比这样做更好:

$('.myElement').css('color','green')
$('.myElement').attr('title','My Element')
$('.myElement').click(function(){ console.log('clicked') });

因为这样做会使jquery“跳入池”查找我的元素3次,而如果链接订单,它只会在池中查找一次(注意池是DOM:)

链接只是调用返回对象上的方法。这本身没有什么好的或坏的。有些人喜欢,有些人不喜欢


关于内存泄漏,当您完成DOM遍历时,jQuery会保留一组缓存的jQuery对象。这实际上与链接没有多大关系,因为被引用的jQuery对象也会做同样的事情,但我认为如果保留对该对象的永久引用,可能会导致泄漏


例如,如果你这样做

var jq_obj = $('.my_class').parents('.another_class');
jq_obj.end();
…jQuery对象现在引用了
“.my_class”
元素的祖先,这些元素具有
”。另一个\u class“

问题是你可以这样做

var jq_obj = $('.my_class').parents('.another_class');
jq_obj.end();
…现在您有了对原始
“.my_class”
元素的引用。这意味着保留了原始参考


因此,如果在调用
.parents()
之后,如果您停在那里(没有调用
.end()
),并且如果您保留了对该
jq\u obj
对象的全局引用,那么现在您将隐式引用所有
“.my\u class”
元素以及
”。另一个类“
元素

同样地,如果从DOM中删除了任何原始的
“.my_class”
元素,则由于该引用,它们不能被GC化


这里有一个例子

len
变量将是被选中的
“.my_class”
元素的原始数量,即使
“.my_class”
元素已被删除


即使我们的
jq\u obj
对象正在引用
”。另一个类“
元素,情况也是如此。原因是
.prevObject
属性引用了执行原始DOM选择的jQuery对象,因此只要
jq_obj
存在,就不会释放节点。

除了设计之外,我看不出它是如何受语法影响的,您所问的其他负面影响似乎只可能是特定解释器实现的弱点。“很多人在我的工作中抨击链接”=>references?,最近我也在这里看到了一些例子。我会看看我是否能把它们挖出来,其中一个肯定是在最近的一个悬赏问题上,回答者告诉提问者“停止链接,这就是Hipster编写代码的方式,可能是您遇到问题的原因”:)链接是JQuery的主要优点之一。。。如果您使用JQuery,我不明白为什么您不应该链接。我认为更多的是对JQuery的抨击,这是有道理的。问题不在于JQuery的链接。对于jQuery本身,它会导致平均一个数量级的性能损失。是的,链接比您的示例更好,但您的意思是,通过不链接,您必须进行冗余DOM选择,而事实并非如此。