2014-01-29 20 views
0

我很好奇cachevar()是否會緩存el元素一次或每次運行它時?jquery緩存元素一次運行多次

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

它不會緩存內容。每當cachevar方法運行時,el變量都會被分配。 –

回答

2

它會在每次調用它時分配一個新變量。

所以它不會「緩存」任何東西。

如果你需要有一個你打算調用很多次,希望緩存它使用元素的功能,你需要移動那些在封閉:

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

通過這樣做,cachevar將訪問到相同的el對象。

如果沒有將對象包含在閉包中,則無法緩存對象。如果你不希望有el重挫的當前範圍,你可以用在一個-所謂IIFE(立即調用函數表達式),因此它創建了一個新的範圍:

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

謝謝!你能告訴我如何緩存元素一次在相同的功能? – Newcoma

+0

真的沒有辦法可以在函數cachevar()之外聲明var嗎? – Newcoma

0

這將緩存它每次你打電話給你的函數:

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

所以如果你聲明一個全局函數,那麼,一旦你打電話給你的函數,那麼EL會被緩存在任何地方使用,則:

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

alert(el); //<---here el is '$(".element")'