関数

関数の種類の違い

宣言型の関数は宣言が出てきたときに構文解析される。Functionコンストラクタを使用した場合、動的に関数が生成されて実行のたびに毎回解析される。関数リテラルを使用した場合、一回だけ。(そもそもFunctionコンストラクタって使ったことなかった)
var foo = function fooName() { }; と名前付きでリテラル関数にすると、再帰する時に名前で呼べる。無名関数の時はcalleeを使って再帰する。

クロージャ

関数内関数。クロージャは外側の関数で定義された変数にアクセス出来る。外側の関数が内部の関数を戻り値で返したりしても、外側にあった関数がスコープを持ってた変数は使用できる。

function(x, y) { 
	function addValue() {
		return (x +y);
	}
	return addValue;
}

addValueがreturnされた後でもx,yは値を保持している。キャッシュに使ってる記事があったなーと思って調べたらPythonの話だけど http://satoshi.blogs.com/life/2009/11/python-hack.html にあった。PHPでも使えて、コードサンプルは http://phpspot.org/blog/archives/2010/10/php53.html こんな感じ。