我很好奇cachevar()是否会缓存el元素一次或每次运行它?
function cachevar() {
var el = $('.element')
el.toggleClass('open')
}
cachevar();
答案 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")'