Javascript 这两个jQuery行等效吗?

Javascript 这两个jQuery行等效吗?,javascript,jquery,performance,closures,Javascript,Jquery,Performance,Closures,我很好奇,就性能而言,以下两个代码示例是否等效: jQuery(document).ready(function($){ var $logo = $("h1.logo"); $logo.on("mouseenter", function() { // Something }); } Vs 更准确地说,jQuery是将$(“h1.logo”)隐式转换为变量,还是在每个mouseenter事件上初始化一个新的jQuery对象?是的,它们是等效的。

我很好奇,就性能而言,以下两个代码示例是否等效:

jQuery(document).ready(function($){
      var $logo = $("h1.logo");
      $logo.on("mouseenter", function() {
        // Something
      });
}
Vs


更准确地说,jQuery是将
$(“h1.logo”)
隐式转换为变量,还是在每个mouseenter事件上初始化一个新的jQuery对象?

是的,它们是等效的。实际上,使用
var$logo=$(“h1.logo”)更有效如果要在代码中再次使用相同的选择器。代码将知道选择器的位置,而不是再次在DOM中搜索

比如说,

    jQuery(document).ready(function($){
         $('h1.logo').addClass('clicked');
         var html = $('h1.logo')[0].html();
         $('h1.logo').on("mouseenter", function() {
            // Something
         });
     }
如果要反复使用
logo
元素,最好像下面这样缓存选择器,这样就不会每次需要调用方法时都创建
新的
jQuery对象

   jQuery(document).ready(function($){
          var $logo = $(".logo");
          $logo.addClass('clicked');
          var html = $logo[0].html();
          $logo.on("mouseenter", function() {
            // Something
          });
    }

是的,它们是等价的。实际上,使用
var$logo=$(“h1.logo”)更有效如果要在代码中再次使用相同的选择器。代码将知道选择器的位置,而不是再次在DOM中搜索

比如说,

    jQuery(document).ready(function($){
         $('h1.logo').addClass('clicked');
         var html = $('h1.logo')[0].html();
         $('h1.logo').on("mouseenter", function() {
            // Something
         });
     }
如果要反复使用
logo
元素,最好像下面这样缓存选择器,这样就不会每次需要调用方法时都创建
新的
jQuery对象

   jQuery(document).ready(function($){
          var $logo = $(".logo");
          $logo.addClass('clicked');
          var html = $logo[0].html();
          $logo.on("mouseenter", function() {
            // Something
          });
    }

是的,它们是等价的。实际上,使用
var$logo=$(“h1.logo”)更有效如果要在代码中再次使用相同的选择器。代码将知道选择器的位置,而不是再次在DOM中搜索

比如说,

    jQuery(document).ready(function($){
         $('h1.logo').addClass('clicked');
         var html = $('h1.logo')[0].html();
         $('h1.logo').on("mouseenter", function() {
            // Something
         });
     }
如果要反复使用
logo
元素,最好像下面这样缓存选择器,这样就不会每次需要调用方法时都创建
新的
jQuery对象

   jQuery(document).ready(function($){
          var $logo = $(".logo");
          $logo.addClass('clicked');
          var html = $logo[0].html();
          $logo.on("mouseenter", function() {
            // Something
          });
    }

是的,它们是等价的。实际上,使用
var$logo=$(“h1.logo”)更有效如果要在代码中再次使用相同的选择器。代码将知道选择器的位置,而不是再次在DOM中搜索

比如说,

    jQuery(document).ready(function($){
         $('h1.logo').addClass('clicked');
         var html = $('h1.logo')[0].html();
         $('h1.logo').on("mouseenter", function() {
            // Something
         });
     }
如果要反复使用
logo
元素,最好像下面这样缓存选择器,这样就不会每次需要调用方法时都创建
新的
jQuery对象

   jQuery(document).ready(function($){
          var $logo = $(".logo");
          $logo.addClass('clicked');
          var html = $logo[0].html();
          $logo.on("mouseenter", function() {
            // Something
          });
    }

这两种方法都是相同的。如果您想对同一jquery元素(即$(“h1.logo”))执行更多操作,建议使用第一个选项。在这种情况下,将使用本地参考副本。现在考虑这个示例,这两种方法都是相同的,在第二个选项中,
$(“h1.logo”)
返回jquery元素的实例,与第一种方法相同。

这两种方法都是相同的。如果您想对同一jquery元素(即$(“h1.logo”))执行更多操作,建议使用第一个选项。在这种情况下,将使用本地参考副本。现在考虑这个示例,这两种方法都是相同的,在第二个选项中,
$(“h1.logo”)
返回jquery元素的实例,与第一种方法相同。

这两种方法都是相同的。如果您想对同一jquery元素(即$(“h1.logo”))执行更多操作,建议使用第一个选项。在这种情况下,将使用本地参考副本。现在考虑这个示例,这两种方法都是相同的,在第二个选项中,
$(“h1.logo”)
返回jquery元素的实例,与第一种方法相同。

这两种方法都是相同的。如果您想对同一jquery元素(即$(“h1.logo”))执行更多操作,建议使用第一个选项。在这种情况下,将使用本地参考副本。现在考虑这个例子,两者都是相同的,在第二个选项中,
$(“h1.logo”)
返回jquery元素的实例,与第一个方法相同。

$(“h1.logo”)
将返回对对象的引用

代码的第一个版本将该对象存储在名为
$logo
的变量中

在这两种情况下,将对该对象调用
on
方法

其他任何东西(在该代码中)都不会触及该变量

我不太了解jQuery的内部结构,但据我所知,mouseenter事件既不会重用原始jQuery对象,也不会创建新的jQuery对象。(函数中
this
的值将是DOM元素对象,而不是jQuery对象)

无论触发
mouseenter
事件时发生什么情况,
$logo
都不会被触摸,因为它没有在事件处理程序函数中被引用

如果重新使用对象,则该对象将来自对它的另一个引用(即不是复制到
$logo
变量中的引用)

因此,代码的第二个版本稍微更有效,因为它不会花费时间将值存储在变量中,然后只使用该值一次。JavaScript编译器可能会对此进行优化。不管怎样,这都是一个微不足道的变化,不值得从有效的角度考虑

首先优化可读性和维护

当您担心速度时,请使用探查器,找出代码真正慢的地方,而不要担心像这样的琐事。

$(“h1.logo”)
将返回对对象的引用

代码的第一个版本将该对象存储在名为
$logo
的变量中

在这两种情况下,将对该对象调用
on
方法

其他任何东西(在该代码中)都不会触及该变量

我不太了解jQuery的内部结构,但据我所知,mouseenter事件既不会重用原始jQuery对象,也不会创建新的jQuery对象。(函数中
this
的值将是DOM元素对象,而不是jQuery对象)

无论触发
mouseenter
事件时发生什么情况,
$logo
都不会被触摸,因为它没有在事件处理程序函数中被引用

如果对象被重用,那么它将来自对它的另一个引用(即,不是引用