関数
関数の種類の違い
宣言型の関数は宣言が出てきたときに構文解析される。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 こんな感じ。