アルアカ - Arcadia Academia

Arcadia Academiaは「エンジニアリングを楽しむ」を合言葉に日本のデジタル競争力を高めることをミッションとするテックコミュニティです。

JavaScriptの関数について解説!基本から応用まで

Featured image of the post

JavaScriptにおいて、関数はコードの再利用性を高め、プログラムの可読性や保守性を向上させる重要な要素です。本記事では、JavaScriptの関数の基本から、さまざまな種類、使い分け、応用例 まで詳しく解説していきます。


[目次を開く]

1. 関数とは?

関数(function) とは、一連の処理をまとめて名前をつけたものです。関数を定義すると、同じ処理を何度も書く必要がなくなり、コードの管理がしやすくなります。


2. 関数の基本的な作り方

JavaScriptの関数の作り方には、主に以下の3つの方法があります。

(1) 関数宣言(Function Declaration)

最も基本的な関数の定義方法です。function キーワードを使って定義します。

function greet(name) {
    return `Hello, ${name}!`;
}

console.log(greet("Alice")); // "Hello, Alice!"

特徴

  • function キーワードで定義
  • ホイスティング(巻き上げ)が適用される
    • 関数の宣言がスクリプトの先頭に持ち上げられるため、関数を定義前に呼び出せる
sayHello(); // "Hello!"
function sayHello() {
    console.log("Hello!");
}


(2) 関数式(Function Expression)

関数を変数に代入する形で定義します。

const add = function (a, b) {
    return a + b;
};

console.log(add(2, 3)); // 5

特徴

  • ホイスティングの影響を受けない
    • 関数宣言と異なり、定義前に呼び出すとエラーになる
console.log(multiply(2, 3)); // ❌ エラー
const multiply = function (a, b) {
    return a * b;
};


(3) アロー関数(Arrow Function)

ES6 で導入された新しい関数の記法です。簡潔に記述でき、thisの挙動が異なる のが特徴です。

const square = (x) => x * x;
console.log(square(4)); // 16

特徴

  • function キーワード不要で、短く書ける
  • thisの挙動が異なる(後述)
const greet = (name) => `Hello, ${name}!`;
console.log(greet("Bob")); // "Hello, Bob!"


3. 関数のパラメータとデフォルト値

関数の引数(パラメータ)にはデフォルト値を設定できます。

function greet(name = "Guest") {
    return `Hello, ${name}!`;
}

console.log(greet()); // "Hello, Guest!"
console.log(greet("Charlie")); // "Hello, Charlie!"

デフォルト値を活用することで、関数の汎用性を高められる


4. コールバック関数(Callback Function)

関数を引数として別の関数に渡すことができます。これを コールバック関数 と呼びます。

function executeCallback(callback) {
    console.log("Executing callback...");
    callback();
}

executeCallback(() => console.log("Hello from callback!"));

コールバック関数の利用例

  • 配列のメソッド (map, filter, forEach など) で活用される
const numbers = [1, 2, 3, 4, 5];
const squaredNumbers = numbers.map((num) => num * num);
console.log(squaredNumbers); // [1, 4, 9, 16, 25]


5. 即時実行関数(IIFE)

関数を定義すると同時に実行する方法 です。主に、スコープを汚染しないために使用されます。

(function () {
    console.log("IIFE executed!");
})();

メリット

  • グローバルスコープを汚さない
  • 変数の衝突を防ぐ

6. 関数と this の関係

JavaScriptでは this の挙動が関数の定義方法によって異なります。

通常の関数 (function キーワード)

通常の関数では this呼び出し元のオブジェクト を指します。

const obj = {
    name: "Alice",
    sayHello: function () {
        console.log(`Hello, ${this.name}!`);
    }
};

obj.sayHello(); // "Hello, Alice!"

アロー関数 (=>)

アロー関数では this定義時のスコープを保持するため、オブジェクトのメソッドには向きません。

const obj2 = {
    name: "Bob",
    sayHello: () => {
        console.log(`Hello, ${this.name}!`);
    }
};

obj2.sayHello(); // "Hello, undefined!"

アロー関数はオブジェクトのメソッドには向かない

function キーワードを使うべき。


7. 高階関数(Higher-Order Function)

関数を引数に取ったり、関数を返したりする関数 を高階関数と呼びます。

function createMultiplier(multiplier) {
    return function (num) {
        return num * multiplier;
    };
}

const double = createMultiplier(2);
console.log(double(5)); // 10

メリット

  • 関数の再利用性を向上
  • 柔軟な関数の組み合わせが可能

まとめ

関数の種類 特徴
関数宣言 function キーワードで定義。ホイスティングが適用される
関数式 const などの変数に代入。ホイスティングなし
アロー関数 => で定義。短く書けるが、this の挙動が異なる
コールバック関数 引数として関数を渡す。配列のメソッドで活用
即時実行関数 定義と同時に実行。スコープを汚染しない
高階関数 関数を引数に取る、または関数を返す関数

JavaScriptの関数を使いこなせるようになると、より効率的で読みやすいコードが書けるようになります!

ぜひ活用してみてください。🚀

フロントエンド開発を学びたいですか?

React・Next.jsなど、モダンなフロントエンド開発をサポートします。

  • Reactの基礎から実践まで学びたい
  • Next.jsでアプリを作りたい
  • TypeScriptを使いこなしたい
まずは30分の無料相談

相談は完全無料・オンラインで気軽に

あなたを爆速で成長させるメンタリングプログラムはこちら

メンタープログラムバナー

React・フロントエンドを本格的に学ぶなら

テックアカデミー
無料相談はこちら