Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这里的jquery代码有区别吗?_Javascript_Jquery_Performance - Fatal编程技术网

Javascript 这里的jquery代码有区别吗?

Javascript 这里的jquery代码有区别吗?,javascript,jquery,performance,Javascript,Jquery,Performance,这是代码块a $('ul.filter li').each(function() { $(this).click(function(e) { //do something }); }); 这是代码块b $('ul.filter li').click(function(e) { //do something }); 这些不是做同样的事情吗?一个比另一个好吗?哪种方法更好/更快? 我假设b块代码较少,但我想在这里确认一下,谢谢,它们都具有相同的效果 我更喜欢第二个,因为它更简洁,而且您创

这是代码块a

$('ul.filter li').each(function() {
    $(this).click(function(e) { //do something });
});
这是代码块b

$('ul.filter li').click(function(e) { //do something });
这些不是做同样的事情吗?一个比另一个好吗?哪种方法更好/更快?
我假设b块代码较少,但我想在这里确认一下,谢谢,它们都具有相同的效果


我更喜欢第二个,因为它更简洁,而且您创建的是单个匿名函数来处理单击,而不是每个元素的匿名函数。

您看到的效果将是相同的,但在第一种情况下,每个
li
元素都分配了一个新函数,在
每个
回调中创建函数对象时

在第二种情况下,事件处理程序只存在一个副本,这意味着它总体上使用的内存更少(尽管这可能无法测量)

内部(在jQuery 1.7中),即:


许多jQuery方法都是这样的(文档中经常提到),因此您可以通过让jQuery隐式地执行此操作来节省字符和内存。

对于jQuery原理,第二种方法更好,因为它更短。

两者都或多或少相同,并给出相同的结果。第二个代码段还将在内部运行
每个
循环,并将单击处理程序分配给每个
li
元素


是的,第二个代码片段非常清晰和简单。

第二个用法称为“隐式迭代”,是jQuery的基石之一

例如,在JavaScript权威指南第6版第530页中,jQuery基础知识:

尽管each()方法很强大,但它不是很常用, 因为jQuery方法通常隐式地迭代 匹配元素并对其进行操作。您通常只需要 如果需要在中操作匹配的元素,请使用each() 不同的方式。即使这样,也可能不需要调用each(),因为 许多jQuery方法允许您传递回调函数

隐式迭代意味着jQuery自动迭代所有 在选择中调用setter方法时选择中的元素 选择。这意味着,当你想对所有人做点什么的时候 对于选择中的元素,不必对其调用setter方法 选择中的每一项—只需在 选择本身,jQuery为您迭代元素


通常,当库将此内置作为标准方式时,通常会更好更快,否则他们不会将其内置。

严格来说,第二个代码段将为每个元素指定完全相同的单击处理程序,而第一个代码段为每个元素创建一个新的(但相同的)函数。因此,第二个更有效。可能是一个没有线索的人认为他有线索,以前也发生在我身上:)虽然有许多细微的区别,但主要的区别是为每个元素+1创建了一个新函数
return this.each( function() {
    jQuery.event.add( this, types, fn, data, selector );
});