- 締切済み
Javascriptのいろいろなファンクション記述
Javascriptにはいろいろな記述方法がありますが なぜみんな小難しい方の記述方法を選択するのでしょうか? 例えば、ファンクション 以下の1のように書けばいいのに、わざわざ2のように書くメリットを教えて下さい 1だとファンクションの位置を気にせず呼び出すことが出来るのになんで2みたいにするんでしょうか ・メモリの節約なのか? ・実行速度優位性なのか? ・1はレガシーで2が最新、W3C的な標準化がJavascriptにもあるのか? ・なんか一般的な書き方じゃないほうが、プロっぽくてカッコイイからか? さすがに一番最後の理由じゃないと思いますが 熟練者のかたお教え下さいませ (1) function hoge (){ } (2) var hoge = function(){ }
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- b0a0a
- ベストアンサー率49% (156/313)
細かいことを挙げればいろんな違いがありますが、ぶっちゃけ気分の問題です。 もっとちゃんと言えば、機能の違いではなく、意味の違いで使い分けられているのです。 つまり、(2)は変数に代入するということを強調しているのです。 例えばこういう例が考えられます。 function hoge() { var x = 1 var y = function () { ...... } return {x: x, y: y} } これであればxとyが同列に見えた方が気持ちいいから代入の書き方を選んでいるのです。 それと、(2)は別に何も小難しくありません。 ただ関数を変数に代入しているだけで、どちらかと言うと独特の記法である(1)の方が特殊です。 JavaScriptでは関数はただの「呼ぶことのできる」オブジェクトであり、他の値と変わらない一級市民なのです。 むしろ、(1)のような書き方をする時こそ、特殊であり、関数を特別視し、宣言して「設置する」という強い意味が含まれてるとも言えます。
- Ogre7077
- ベストアンサー率65% (170/258)
まず名前ですが、 (1) 関数宣言 (2) 関数式 です。 関数式というのは、関数宣言と比較して * 関数評価のタイミングが実行時になった * 文から式になった * 関数オブジェクトを変数に代入する処理が無くなった が違います。 この違いがあるので、以下の様に関数式を使うことがあります。 * 関数の引数に使うコールバック関数が、短く無駄なく書ける 例) formElement.addEventListener('submit',function(e){},false); * オブジェクトのプロパティに関数を代入する処理が、短く無駄なく書ける 例) object.property = function(){}; * 関数型プログラミングっぽい記述ができてカッコいい(だけじゃなく便利ですよ) 参考) http://www.oreilly.co.jp/books/9784873116600/ しかも JavaScript の新機能として、関数式を更に短く便利にした 「アロー関数式」が導入される見込みですので、関数式を多用する流れは今後も続きそうです 参考) https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/arrow_functions
- yambejp
- ベストアンサー率51% (3827/7415)
2は無名関数の性質上、名前の競合が発生したときに上書きができますね
お礼
yambejp様 ご回答ありがとうございます それってデメリットではないのでしょうか? 1だったらちゃんとエラーになるのに エラーにならなければ製作者の意図しない挙動になってしまいますよね