多次运行时,jquery缓存元素一次

时间:2014-01-29 09:47:27

标签: javascript jquery

我很好奇cachevar()是否会缓存el元素一次或每次运行它?

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

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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")'