我从这里得到的这个函数(http://ejohn.org/apps/learn/#19),即使它没有任何内部函数,它在外部函数结束后传入的值的“记录”持续存在,但是有一些类型的数据缓存。事实上,在调用函数之后,缓存属性中的值仍然存在。我想知道这是否是一种封闭:
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 = {};
我不确定它是应用于函数属性还是仅适用于引用的函数。我仍然对封闭感到困惑,所以也许我在胡说八道。
答案 0 :(得分:1)
不,没有闭包,但是像任何其他javascript对象一样,函数可以接收属性,这就是这里发生的事情。
getElements
是一个对象,因此您可以为getElements.cache
分配值。
这是另一种不会混淆全局命名空间的方法,可能比使用闭包稍微轻一点,但由于属性不是私有的(可以很容易访问)而且(理论上非常)可能导致名字冲突。
答案 1 :(得分:1)
Javascript中的任何函数都是一个对象。存储在cache
函数上的getElements
属性对于函数的所有调用都是相同的。
此处不涉及任何关闭。