js
1 function hoge(){ 2 console.dir("hoge"); 3 hogege(); 4 function hogege(){ 5 console.dir("hogege"); 6 } 7 } 8
このような関数の中に関数を書くことは先輩からよくないといわれましたが理由がわかりませんでした。
hogegeメソッドはhoge以外では使わない想定なので、hogegeがhogeの外から直接呼ばれなければよいと思っているのですが直接呼ぶ方法でもあるのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答5件
0
理由は先輩に聞いてください。
関数は実行した瞬間に全て実行されます。
その場合、質問文に登場したhogege関数は実行される度に生成されます。
もし2回実行された場合はhogege関数は2回生成され、削除されるので実行速度に多少ダメージになるでしょう。
後はどのレベルで使わないと想定しているかにもよります。
基本的にプログラミングでコピペは常に悪手です。
他で使いたくなった場合、コピペで同じ関数を生成することになるような事は出来るだけ避けてください。
質問文のコードでは判断出来ませんが、
誰がどう見てもその中で完結する関数ならばそういう書き方でも良いと思います。
とはいえ、関数化する意味あるのか?とか、無名関数の即時実行関数でよくね???問題がつきまとうでしょうけど。
最後に、関数宣言は巻き上げのルールが結構複雑なので、
もし私が先輩ならばfunction hoge () {
という宣言をやめさせて、
var hoge = function () {
の書き方で統一させます。
これはCoffeeScriptが採用しているルールでもあり、関数宣言は一切使う場面が無い事を示しています。
投稿2018/11/15 10:33
編集2018/11/15 10:35総合スコア21400
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/16 07:06

0
よくないことはないと思います。
hogegeメソッドはhoge以外では使わない想定
このことを意識してコードが書けているのはむしろ良いことだと思います。これを否定する理由がないです。独立性の低いものはhogeの外に定義しないほうが良いですし、独立性が低い中でもまとまった処理は関数化して括りだすのは良い設計だと思います。また、関数内関数を外から呼び出すことはできないと思います。
アロー関数で書いたほうがいいとか、単にブロックスコープがほしいならletでいいとか、コールバックなら無名関数で書けとかいうことなら少し検討してもいいかもしれません。
あとjsに限らず関数(処理)を切り出せる人は、関数を使わずに書くことが容易にできますが、逆は難しいので特に気にするような指摘ではないと思いました。
また、仮にここでだめな理由があがっても、理由を説明できない程度の指摘だと思ったほうが良いと思います。
投稿2018/11/15 10:42
総合スコア12705
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
正確なところは聞いてもらうとして…
ありがちなところでは、過去にそういうコーディングをしていた部分で
発見しづらいバグがあって大変な目にあってしまった、とか?
社内のコーディング規約もしくはそれに準ずるものに
そういう記述があったり?
ひょっとしたら、単にその方が「きもちわるい」と感じる
コーディングだったのかも?
投稿2018/11/15 10:40
総合スコア7468
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
hoge()を実行するたびに、hogege()が定義されるのは無駄じゃないか!
とか、な話だったりするんですかね・・・(笑)
実行効率とかメモリ効率とかが、要件としてある場合は、
大事なことなのかもしれないですね。
自分の実務上ではあまりないので、
詳しくは理解していないですが・・・
そういうものを求めないのであれば、
コードの意図が、他人(未来の自分も含め)読みやすいコードのほうが、
有用なことが多いように思います。
メンテナンスする機会は多いですしね(^^)
あくまで、個人的な意見ですが。
投稿2018/11/15 10:38
総合スコア715
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。