カテゴリ: JavaScript 更新日: 2025/09/08

JavaScriptの関数宣言と関数式の違いをわかりやすく解説

JavaScriptの関数宣言と関数式の違いをわかりやすく解説
JavaScriptの関数宣言と関数式の違いをわかりやすく解説

先生と生徒の会話形式で理解しよう

生徒

「JavaScriptで関数を作る方法っていくつかあると聞きました。関数宣言と関数式って何が違うんですか?」

先生

「どちらも関数を作る方法ですが、使い方や特徴が少し違います。まずは基本を押さえて、わかりやすく説明しますね。」

生徒

「お願いします!初心者でもわかるように教えてほしいです。」

先生

「それでは、具体的な例を交えて見ていきましょう!」

1. 関数宣言とは?

1. 関数宣言とは?
1. 関数宣言とは?

関数宣言は、JavaScriptで関数を作る一番基本的な方法です。function キーワードを使って名前をつけ、処理の中身を書きます。例を見てみましょう。


function greet() {
  console.log("こんにちは!");
}

このコードは greet という名前の関数を作っています。呼び出すと「こんにちは!」と表示されます。

関数宣言の特徴の一つは、関数を呼び出すコードより前に書かれていなくても、実行時に使えることです。

2. 関数式とは?

2. 関数式とは?
2. 関数式とは?

関数式は、関数を変数に代入して作る方法です。変数に関数を入れるイメージです。例を見てみましょう。


const greet = function() {
  console.log("こんにちは!");
};

この場合、greet は変数ですが、中身は関数です。呼び出すときは関数宣言と同じように greet() と書きます。

ただし、関数式の場合は、関数を作ったあとにしか使えません。つまり、関数式の前で greet() を呼ぶとエラーになります。

3. 関数宣言と関数式の大きな違いは「巻き上げ(ホイスティング)」

3. 関数宣言と関数式の大きな違いは「巻き上げ(ホイスティング)」
3. 関数宣言と関数式の大きな違いは「巻き上げ(ホイスティング)」

JavaScriptでは、関数宣言は「巻き上げ(ホイスティング)」という仕組みで、プログラムのどこで呼んでも使えます。これは関数宣言が実行前にメモリに読み込まれるためです。

例えば、次のコードはエラーになりません。


sayHello();

function sayHello() {
  console.log("こんにちは!");
}

一方、関数式は巻き上げされません。変数に代入されるまでは使えないため、次のコードはエラーになります。


// エラーになるコード
sayHello();

const sayHello = function() {
  console.log("こんにちは!");
};

4. もう少し身近な例えで理解しよう

4. もう少し身近な例えで理解しよう
4. もう少し身近な例えで理解しよう

関数宣言は「朝の準備を全部まとめたタイムテーブル」を先に用意しておくイメージです。だから朝でも昼でも、そのスケジュールをすぐに見て使えます。

関数式は「その日の予定を書いたメモ」を手に持っているようなもの。メモを持つまでは予定を確認できません。持ったあとなら見られます。

この違いが「巻き上げ(ホイスティング)」のイメージに当たります。

5. どちらを使えばいいの?

5. どちらを使えばいいの?
5. どちらを使えばいいの?

初心者のうちは関数宣言から学ぶのがおすすめです。わかりやすく、どこで呼んでも使えるので扱いやすいです。

関数式は少し慣れてきたら使うと良いでしょう。特にアロー関数などと組み合わせて使うことが多いです。

6. 関数宣言と関数式のまとめ

6. 関数宣言と関数式のまとめ
6. 関数宣言と関数式のまとめ
  • 関数宣言は function 関数名() { } の形で書く。巻き上げがあるためどこでも呼べる。
  • 関数式は関数を変数に代入する形。巻き上げがなく、代入前は呼べない。
  • 使いやすさやコードの書き方に応じて使い分ける。
カテゴリの一覧へ
新着記事
New1
TypeScript
TypeScriptとESNextの連携を完全ガイド!最新機能を使いこなす設定と対応法
New2
JavaScript
JavaScriptの正規表現で任意の1文字(.)や文字クラスを使う方法
New3
TypeScript
TypeScriptで非同期イテレーター(for await of)を活用する
New4
TypeScript
TypeScriptで「Hello World」を出力する手順と解説
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptの日時操作Tips!実務で役立つテクニック集
No.3
Java&Spring記事人気No3
JavaScript
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
No.4
Java&Spring記事人気No4
TypeScript
TypeScriptのif文の使い方を完全ガイド!初心者でもわかる条件分岐
No.5
Java&Spring記事人気No5
TypeScript
TypeScriptでESLintとPrettierを導入!コード整形ルールを自動で統一する方法
No.6
Java&Spring記事人気No6
TypeScript
TypeScriptでコメントを書く正しい書き方と使い分け【初心者向けにやさしく解説】
No.7
Java&Spring記事人気No7
JavaScript
JavaScriptの配列の要素にアクセスする方法(インデックス番号の使い方)
No.8
Java&Spring記事人気No8
JavaScript
JavaScriptの正規表現で文字列を置換する方法(replaceメソッド)