2

ここから取得したこの関数 ( 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 = {};

関数のプロパティに適用されるのか、参照される関数のみに適用されるのかはわかりません。私はまだ閉鎖についてあまりにも混乱しているので、ナンセンスを話しているのかもしれません.

4

2 に答える 2

1

いいえ、クロージャーはありませんが、他のjavascriptオブジェクトと同様に、関数はプロパティを受け取ることができます。これがここで行われます。

getElementsはオブジェクトなので、に値を割り当てることができますgetElements.cache

これは、グローバル名前空間を乱雑にしないもう1つの方法であり、おそらくクロージャーを使用するよりも少し軽いですが、プロパティがプライベートではなく(簡単にアクセスでき)、(非常に理論的には)名前の競合につながる可能性があるため、少しクリーンではありません。

于 2013-02-28T20:03:39.913 に答える
1

Javascriptの関数はすべてオブジェクトです。関数に格納されるcacheプロパティは、getElements関数のすべての呼び出しで同じです。

ここでは閉鎖は含まれません。

于 2013-02-28T20:04:38.400 に答える