假设我有以下示例:
例子一
$('.my_Selector_Selected_More_Than_One_Element').each(function() { $(this).stuff(); $(this).moreStuff(); $(this).otherStuff(); $(this).herStuff(); $(this).myStuff(); $(this).theirStuff(); $(this).children().each(function(){ howMuchStuff(); }); $(this).tooMuchStuff(); // Plus just some regular stuff $(this).css('display','none'); $(this).css('font-weight','bold'); $(this).has('.hisBabiesStuff').css('color','light blue'); $(this).has('.herBabiesStuff').css('color','pink'); }
现在,可能是:
例子二
$('.my_Selector_Selected_More_Than_One_Element').each(function() { $this = $(this); $this.stuff(); $this.moreStuff(); $this.otherStuff(); $this.herStuff(); $this.myStuff(); $this.theirStuff(); $this.children().each(function(){ howMuchStuff(); }); $this.tooMuchStuff(); // Plus just some regular stuff $this.css('display','none'); $this.css('font-weight','bold'); $this.has('.hisBabiesStuff').css('color','light blue'); $this.has('.herBabiesStuff').css('color','pink'); }
关键不是实际的代码,而是使用$(this)一次以上,两次/三次或三次以上的时间。
$(this)
上午我更好的性能,明智使用 例如两个 比 例如一个 (也许与解释为什么或者为什么不)?
编辑/注意
我怀疑两个更好。$this当我不可避免地忘记将$this事件处理程序添加到事件处理程序时,我有点担心的是在添加代码,而不是无意中引入了一个潜在的难以诊断的错误。那么我应该使用var$this = $(this)还是$this = $(this)为此?
$this
var$this = $(this)
$this = $(this)
谢谢!
是的,绝对可以使用$this。
每次使用时$(this),都必须构造一个新的jQuery对象,同时$this保留相同的对象以供重用。
一个性能测试表明,$(this)是显著慢$this。但是,由于两者都每秒执行数百万个操作,因此它们都不大可能产生任何实际影响,但是无论如何,重用jQuery对象是一种更好的做法。当真正的性能影响出现是当一个选择,而不是一个DOM对象,反复传递给jQuery的构造-如$('p')。
$('p')
至于的使用var,再次 始终 使用var来声明新变量。这样,该变量将只能在声明其的 函数中 访问,并且不会与其他函数冲突。
var
更好的是,jQuery设计为可与链接一起使用,因此请尽可能利用这一点。与其声明一个变量并多次调用该函数,不如说:
var $this = $(this); $this.addClass('aClass'); $this.text('Hello');
…将函数链接在一起,以不必要地使用附加变量:
$(this).addClass('aClass').text('Hello');