JavaScriptとかよくわからないけど自分なりに解釈してみた。
function hoge(){} と var hoge=function(){} の違い - 床のトルストイ、ゲイとするとのこと
前者は名前付き関数で、後者は無名関数を変数に入れている。
名前付き関数は、定義するとスコープ内でどこでも使えるが、変数に無名関数を入れる場合は、変数に無名関数を代入しないと初期化されていないものと扱われるってことか。
変数はファイル内のどこかで宣言された時点で、名前は存在するけれど代入はあくまで実行順に従う。
この辺、変数宣言が厳密な言語と比べると分かりにくいけど、表記されていないけどファイルの先頭で自動的に宣言されていると考えればよさそう。
前者は、概念であり、例えば人間という種族を表すとすると、後者はvar hogeまででどこかの人間という意味となり、var hoge=function(){}となった時点で一人の特定の人、例えばクラスの〜さんみたいな意味になる。
ところで、JavaScriptの変数ってなんでも入るっていうけど、この未定義のエラーをみているとむしろポインタみたい。型に縛られないから汎用ポインタかな。