サイ本56P にCallオブジェクトというのが載っていた。
関数の実行中、ローカル変数はその見えないオブジェクトのプロパティとなっているらしい。

そこでふと関数自身とローカル変数の名前が被っているときに関数を参照できるのか、
気になって調べてみた。

function foo() {
    console.log(foo); //undefined
    var foo;
}
foo();

undefinedだった。

そういえばJSは関数内のどこでvarしても一番上にあるのと同じってのは知ってたし、
そのvarが変数名とCallオブジェクトを紐付けるためにあるなら処理の最初で
Callオブジェクトにundefinedが入るんだろうな。

そして関数自身はスコープチェーンの一階層上にいるんだな、と。
まぁ考えてみればそうだよね。