当方JavaScript歴3週間目です。長らくPythonを扱ってきたので変数のスコープはグローバルか否かの2種類しか存在しなかったのですが、先日JavaScriptにはvarを付けるか付けないか以外にもletconstといったスコープが存在することを認知いたしました。

 両者の違いは理解したのですが、いざ自分の書いたソースコードをletconstのみで書き直してみるとなると、どうしてもvarが良いというところが出てきてしまいます。

function hoge( hoge1, hoge2 ) {

    if ( hoge1 === "abc" ) {
        var hoge3 = "def";
    } else if ( hoge1 === "def" ) {
        var hoge3 = "ghi";
    }

    return hoge1 + hoge2 + hoge3;

}

 上記のソースコードで言うと、「hoge1 の値によって hoge3 の値を変更したいけど、hoge3 はブロック外でも扱いたい!」といった感じです。(ただし本来はもっと長い処理を含むので、if毎にreturnするとソースコードが長くなってしまいます)

 インターネット上の情報を見る限り、安全性が高いとかなんとかで「varは必要無い」といった意見が多く見られるのですが、このように関数内で共通の変数を宣言したい場合は、今でもvarを使って良いのでしょうか...?

 あるいはもっと良い方法があればご教授いただけるとありがたいです!よろしくお願いします。