Обзоры через JSLint
оложим, у меня есть следующий пример:
Пример первый
$('.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)
когда он используется более одного раза / два / три раза или более.
Я лучше с точки зрения производительности, используяпример два чемпример первый (возможно с объяснением почему или почему нет)?
EDIT / NOTE
Я подозреваю, что два лучше одного; то, чего я немного боялся, было перетекать мой код$this
и чем непреднамеренно вводить потенциально трудно диагностируемую ошибку, когда я неизбежно забываю добавить$this
к обработчику событий. Так что я должен использоватьvar $this = $(this)
, или же$this = $(this)
за это?
Спасибо!
РЕДАКТИРОВАТЬ
Как указывает Скотт ниже, это считается кешированием в jQuery.
http://jquery-howto.blogspot.com/2008/12/caching-in-jquery.html
Джаред