#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? Где они будут храниться?