我从这里得到的函数(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/

10-09 15:04