Вопрос о кэше в javascript / jquery

#javascript #jquery #function #caching

#javascript #jquery #функция #кэширование

Вопрос:

Интересно, будет ли селектор «$cacheA» кэшироваться при загрузке страницы в примере ниже?

 // MY JQUERY FUNCTION/PLUGIN
(function( $ ){
$.fn.myFunction = function() {

var $cacheA = this,
$cacheB = $cacheA.children(),
$cacheC = $cacheB.eq(0);
$cacheD = $cacheA.parent();    

$cacheD.click(function(){

$cacheA.toggle();
$cacheB.fadeIn();
$cacheC.slideUp();

});

};
})( jQuery );
// END JQUERY FUNCTION/PLUGIN



$(window).load(function(){

$('#mySelector').myFunction();

});
  

Будет ли какая-либо причина для этого:

 $(window).load(function(){

var $mySelector = $('#mySelector');

$mySelector.myFunction();

});
  

Комментарии:

1. Если кэшируется $ cacheA, я предполагаю, что $ cacheB, $ cacheC и $ cacheD также будут кэшироваться при загрузке страницы?

2. Этот вопрос не имеет смысла. Что вы имеете в виду, «кэшированный»?

3. Под «кешированием» я подразумеваю: сохраняя селектор в переменной, браузеру нужно выполнить doom travel только один раз. Это ускорит работу скрипта, если селектор используется несколько раз.

Ответ №1:

Если внутри вашего обработчика «load» вам приходилось выполнять множество операций jQuery с «$ mySelector», то сохранение этого в переменной было бы хорошей идеей. Однако в вашем примере вы используете значение только один раз, так что на самом деле это не имеет никакого значения вообще.

Комментарии:

1. Спасибо за ваш ответ. $mySelector будет использоваться в функции jquery. Смотрите «var $cacheA = this». Будет ли это иметь какое-либо значение тогда?

2. 1 Кэширование имеет ценность только тогда, когда вы снова и снова просматриваете DOM с помощью одного и того же селектора.

3. Нет — если вы сохраните $('#something') значение, то сможете повторно использовать его много раз. Внутри вашего плагина jQuery «myFunction» это будет значение this . Однако переменные «$cacheB», «$cacheC» и так далее являются локальными переменными, и они будут повторно вычисляться каждый раз, когда вы вызываете «myFunction», даже если вы вызываете ее с одним и тем же исходным объектом jQuery («$mySelector»).

Ответ №2:

Firstable, $cacheA и другие внутри функции click будут неопределенными.

 $cacheD.click(function(){

$cacheA.toggle();
$cacheB.fadeIn();
$cacheC.slideUp();

});
  

Второй,

 $.fn.myFunction = function() {

var $cacheA = this,
$cacheB = $cacheA.children(),
$cacheC = $cacheB.eq(0);
$cacheD = $cacheA.parent();
}
  

Итак, после $('selector').myFunction() как я могу использовать $ cacheB, $ cacheC и $ cacheD? Где они будут храниться?