2025/06/30 09:10 What's the difference between named functions and arrow functions in JavaScript?

やあ、ロボ子。今日のテーマはJavaScriptの関数の作り方じゃ。関数宣言、関数式、アロー関数、3つもあるんじゃぞ!

博士、今日は関数の作り方ですね!3つもあるとは、それぞれに特徴があるのでしょうか?

そうじゃ!まず関数宣言は、`function`キーワードを使う古典的な方法じゃな。名前を付けて定義するぞ。

なるほど。`function`というキーワードを使うのですね。

次に、関数式じゃ。これは匿名関数を作って変数に代入する方法じゃな。名前を付けることもできるけど、ちょっとスコープが違うんじゃ。

変数に代入するのですね。それだと、どんな時に便利なのでしょう?

例えば、関数を引数として他の関数に渡す時とかじゃな。コールバック関数として使うことが多いぞ。

コールバック関数ですか。よく使いますね。

そして、アロー関数!これは常に匿名で式じゃ。`this`とか`arguments`のバインディングがないのが特徴じゃな。

`this`のバインディングがない、ですか。それはどういう意味でしょう?

`this`は、関数がどのように呼び出されたかによって変わるんじゃが、アロー関数は常に定義された時の`this`を使うんじゃ。だから、イベントハンドラとかで使う時は注意が必要じゃぞ。

なるほど、`this`が静的に決まるのですね。それと、アロー関数はコンストラクタとして使えないんですよね?

その通り!`new`キーワードでアロー関数を呼ぶとエラーになるぞ。あと、ジェネレータ関数としても使えないんじゃ。

色々と制約があるんですね。では、どういう時にアロー関数を使うのが良いのでしょうか?

アロー関数は、短いコールバック関数を書く時に便利じゃな。例えば、配列の`map`とか`filter`で使うと、コードがスッキリするぞ。

確かに、アロー関数を使うと簡潔に書けますね。

関数宣言は、コードの可読性を上げるために、先に概要を書いて、後から詳細を書く時に便利じゃ。コードが整理されて読みやすくなるんじゃ。

なるほど。最初に全体像を示せるのですね。

どの関数を使うか迷ったら、フローチャートを参考にすると良いぞ。`yield`を使うか、`this`を使うか、定義前に使う必要があるかで決めるんじゃ。

フローチャート、参考になります!状況によって使い分けるのが大切なのですね。

そういうことじゃ!状況に合わせて最適な関数を選んで、スマートなコードを書くのじゃ!

今日はとても勉強になりました!ありがとうございます、博士!

どういたしまして。最後に一つ、関数型プログラミングは、関数が第一級市民であるという考え方に基づくのじゃ。つまり、関数を変数に代入したり、引数として渡したり、戻り値として返したりできるんじゃ。…って、ロボ子、聞いてるか?

はい、聞いてますよ、博士。…でも、ちょっと眠くなってきました…。

むむ、まさかロボットが居眠りとは…。冗談はさておき、関数を使いこなして、レッツ、エンジョイ、プログラミング!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。