違いは何ですか
var a = function() {}
と
var a = function b() {}
後者の b は未定義ですか?
1 つ目は無名関数式で、2 つ目は名前付き関数式で、どちらも Javascript で有効です。
たとえば、arguments.callee
どこにいても自分自身を参照するため、(非推奨で厳密モードでは許可されていません) なしで再帰に使用できます。参照のスコープは、関数内でのみローカルです。つまり、グローバルにはアクセスできません。
var a = function b(){
return b;
};
function c() {
return c;
}
var d = function e() {
return e();
};
d(); // maximum call stack size exceeded :P
var f = c;
c = null;
f(); // null
a(); // function
b();// undefined not a function
b; // not defined
a()(); // same function again
2 つ目は名前付き無名関数です。名前はスタック トレースに表示されます (それ以外の場合、スタック トレースには「無名関数」と表示されます)。
var a = function() {}
関数名は省略可能です。この場合、関数名は省略されます。これらの関数は無名関数と呼ばれます。
詳細については、JavaScript スコープと無名関数の長所と短所を参照してください。