JavaScript 関数宣言の 2 つのスタイルを検討してください (4 つのうちの 1 つだと思います)。
function foo() {
// ...
}
対
var foo = function() {
// ...
}
多くの場合、これらは同じように動作します。たとえば、次の SO の質問で説明されているように、主な違いを理解していると思います。
両方とも、この非常に役立つ説明にリンクする回答があります。
javascript-function-declaration-ambiguity
しかし、両方のスタイルを 1 つのステートメントにまとめたいと思います。1 つの短い/縮小可能なローカル変数名 (非常に頻繁に参照する必要があるため) と 1 つの説明的な名前 ( .name
.
これは私が混乱するところです。関数を変数にすぐに代入すると、関数自体の名前が未定義のままになるかのようです。
var f = function foo() {
// ...
};
console.log( f.name ); // "foo"
console.log( foo.name ); // !? error: foo is not defined ?!
質問に行きましょう:なぜこれがうまくいかないのですか?あるいは、これら 2 つの宣言スタイルについて、私がまだ誤解している可能性があることは何ですか?
以下はエラーにならないことに注意してください。
var f = foo;
function foo() {
// ...
}
console.log( f.name ); // "foo"
console.log( foo.name ); // "foo"
正確には、これはどう違うのですか?
PS:これはこのSOの質問とは異なると思います:
in-javascript-what-is-the-motivation-or-advantage-of-using-var-foo-function-f...
これは、変数名と関数名が同じである、私の苦境の特殊なケースに関するものです。
var foo = function foo() {
// ...
};