2014-01-29 3 views
0

Мне интересно, если cachevar() будет кэшировать элемент el один раз или каждый раз, когда я его запускаю?элементы кеширования jquery один раз при запуске несколько раз

function cachevar() { 
    var el = $('.element') 
    el.toggleClass('open') 
} 
cachevar(); 
+0

Это обыкновение кэша ничего. el переменная будет распределяться каждый раз при запуске метода cachevar. –

ответ

2

Он будет выделять новую переменную каждый раз, когда вы ее вызываете.

Таким образом, он ничего не «кеширует».

Если вам нужно иметь функцию, которую вы планируете звонить много раз и хотите кэшировать элементы, которые он использует, вам необходимо переместить тех, в затворе:

var el = $('.element'); 
function cachevar() { 
    el.toggleClass('open') 
} 
cachevar(); 
cachevar(); 

Поступая таким образом, cachevar будет доступ к тому же el объект.

Вы не можете кэшировать объекты, не имея их в закрытии. Если вы не хотите иметь el затирания текущую область действия, вы можете обернуть, что в-так называемой IIFE (Сразу Вызывается функция Expression), так что она создает новую область:

var cachevar = (function() { 
    var el = $('.element'); 
    return function() { 
     el.toggleClass('open') 
    } 
}()); 
// el is undefined here 
cachevar(); 
cachevar(); 
+0

Спасибо! Можете ли вы рассказать мне, как кешировать элемент один раз в одной и той же функции? – Newcoma

+0

Действительно ли нет варианта, чем объявлять var вне функции cachevar()? – Newcoma

0

Это кэшировать каждый раз, когда вы называете функцию:

function cachevar() { 
    var el = $('.element') 
    el.toggleClass('open') 
} 
cachevar(); 

так что если вы объявить глобальную функцию, то, как только вы обратитесь к функции, то эль будет кэшированной использовать в любом месте, то:

var el=''; 
function cachevar() { 
    el = $('.element') 
    el.toggleClass('open') 
} 
cachevar(); 

alert(el); //<---here el is '$(".element")' 
Смежные вопросы