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
都不会被触摸,因为它没有在事件处理程序函数中被引用
如果对象被重用,那么它将来自对它的另一个引用(即,不是引用