我从这里得到的函数(http://ejohn.org/apps/learn/#19),尽管它没有任何内部函数可以在外部函数结束后传递的值的“记录”中保持不变,但仍具有某种类型的数据缓存。实际上,在对函数的任何调用之后,cache属性中的值都会保留。我想知道这是否是封闭类型:
function getElements( name ) {
var results;
if ( getElements.cache[name] ) {
results = getElements.cache[name];
} else {
results = document.getElementsByTagName(name);
getElements.cache[name] = results;
}
return results;
}
getElements.cache = {};
我不确定它是否适用于函数属性或仅适用于引用的函数。我对闭包还是很困惑,所以也许我在胡说八道。
最佳答案
不,没有闭包,但是一个函数,就像任何其他javascript对象一样,可以接收属性,这就是在这里发生的事情。getElements
是一个对象,因此您可以为getElements.cache
分配一个值。
这是不使全局名称空间混乱的另一种方式,可能比使用闭包要轻一些,但由于属性不是私有的(可以轻松访问)并且(从理论上来说)可能导致名称冲突,因此不那么干净。
关于javascript - 此功能是否关闭?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15144580/