4

このブログでは、関数宣言と関数式の違いについて説明しています。

この 2 つの例を示します。彼らは最初のものを「無名関数式」と呼び、2番目のものを「名前付き関数式」と呼んでいます。

// anonymous function expression
var a = function(){
   return 3;
}

// named function expression
var b = function bar(){
   return 3;
}

これら 2 つを Chrome の JS コンソールでテストしたところ、次のように表示されました。

a()
=> 3

b()
=> 3

bar()
=> bar is not defined

私の質問は: 2 番目の関数式の宣言で、「バー」のポイントは何ですか? 一般に、名前付き関数式を使用するのはなぜでしょうか?

4

2 に答える 2

7
var b = function bar(){
   return 3;
}
bar()
=> bar is not defined

識別子は関数内でbarのみ使用できます。試す

var b = function bar() {
    console.log(bar);
}
b();

名前付き関数式を使用するのはなぜですか?

IEFEでの再帰など、到達可能な変数または定数変数に割り当てられていない関数式を参照できるようにするため。

また、名前付き関数は、デバッグ中、たとえばコール スタック (トレース) やブレークポイント リストなどで異なって表示されます。多くの場合、関数式の代わりに (名前付きの) 関数宣言を使用できます。 http://blog.niftysnippets.org/2010/03/anonymouses-anonymous.htmlも参照してください。

于 2013-10-10T19:02:19.347 に答える
7

エラーが発生した場合、関数には名前があるため、このようにすることを好む人もいます。それは主に好みの問題であり、名前のない関数で問題が発生する頻度です。

通常、宣言で使用されることはありませんvarが、代わりにコールバックを宣言するときに使用されます。

callbackFunction(function success() { ... }, function fail() { ... })

そうすれば、どの引数がどれであるかを知ることができ、ラベルが付けられます。そのうちの 1 つが失敗した場合、どの引数が壊れたかを正確に示すことができます。

于 2013-10-10T18:54:02.273 に答える