第7回 関数の定義と呼び出し

投稿日:2024.11.15.
更新日:2025.04.12.

ホームページ制作

JavaScriptを学ぼう

株式会社TREVOの月額制ホームページ制作サービス
PR

板浪 雅樹
執筆・編集 板浪 雅樹

2005年から WEB 業界一筋。500サイト超を手がける SEO・WordPress のエキスパート。「公開後こそ本番」を掲げ、データ分析とユーザー視点で成果を引き出す運用を提案。

2005年に制作会社へ入社後、プログラマーからキャリアをスタート。サーバー構築・データベース設計で培った技術を強みに、WordPress テーマ/プラグイン開発やサイト移行の難案件を多数担当してきました。
2010年以降は SEO エンジニアとしても活動領域を拡大。コンテンツ設計・内部リンク最適化・高速化チューニングにより、競合の激しいビッグキーワードで上位獲得を実現してきました。
現在は TREVO のウェブディレクターとして、要件定義から運用改善まで一気通貫でリード。AI ライティングや GA4/Looker Studio を活用したレポーティング手法を開発し、「数字で説明できるサイト運用」をポリシーにクライアントの ROI 最大化を支援しています。
趣味/強み:筋トレとランニングで日々の集中力をキープ。複雑な課題を“仕組み”で解決するのが得意。
モットー:「サイトは資産。改善を止めた瞬間から価値は目減りする」

執筆記事:記事一覧ページ
SNS:x(旧 Twitter)@TREVO_WEB

関数の基本概念と役割

プログラミングにおいて、関数は特定の処理をまとめた再利用可能なコードのブロックです。関数を使用することで、コードの可読性や保守性を向上させ、開発効率を高めることができます。JavaScriptでは、関数はファーストクラスオブジェクトとして扱われ、他の値と同様に変数に代入したり、引数や戻り値として使用できます。

関数の主な役割

コードの再利用性の向上

同じ処理を複数回行う場合、一度関数として定義しておけば何度でも呼び出すことができます。これにより、コードの冗長性を減らし、保守性を高めることができます。

// 関数を使わない場合
console.log('Hello, Alice!');
console.log('Hello, Bob!');
console.log('Hello, Charlie!');

// 関数を使う場合
function greet(name) {
  console.log(`Hello, ${name}!`);
}

greet('Alice');
greet('Bob');
greet('Charlie');

コードの可読性と構造化

関数を使用することで、コードを論理的な単位に分割できます。これにより、プログラムの構造が明確になり、他の開発者や将来の自分がコードを理解しやすくなります。

function calculateTotal(price, taxRate) {
  return price + price * taxRate;
}

let total = calculateTotal(100, 0.1);
console.log(`合計金額は${total}円です`);

スコープの管理

関数内で宣言された変数は、その関数内でのみ有効です。これにより、グローバルスコープの汚染を防ぎ、予期しない変数の上書きを防止できます。

let message = 'グローバルメッセージ';

function showMessage() {
  let message = 'ローカルメッセージ';
  console.log(message);
}

showMessage(); // 出力: ローカルメッセージ
console.log(message); // 出力: グローバルメッセージ

抽象化とモジュール化

関数を使用して、複雑な処理を抽象化し、簡潔なインターフェースを提供できます。これにより、コードのモジュール化が進み、大規模なプロジェクトでも管理しやすくなります。

function fetchData(url) {
  // データ取得ロジックを抽象化
  return fetch(url)
    .then(response => response.json())
    .catch(error => console.error(error));
}

fetchData('https://api.example.com/data')
  .then(data => {
    // データの処理
  });

JavaScriptにおける関数の特性

  • ファーストクラスオブジェクト関数は他のオブジェクトと同様に扱われ、変数に代入したり、他の関数の引数や戻り値として使用できます。
  • 高階関数関数を引数に取ったり、関数を返す関数を高階関数と呼びます。これにより、柔軟で強力なプログラム構造を実現できます。
  • クロージャ関数が定義されたスコープを保持する特性であり、関数内から外部の変数にアクセスできます。クロージャを活用することで、データのカプセル化やプライベート変数の実現が可能です。

関数が重要な理由

  • 保守性の向上コードの変更が必要な場合、関数内のコードを修正するだけで済みます。
  • デバッグの容易さ問題が発生した際、関数単位で問題箇所を特定しやすくなります。
  • テストの容易さ関数ごとに単体テストを行うことで、コードの信頼性を高めることができます。

関数の定義方法

関数宣言(function宣言)の書き方

関数宣言は、functionキーワードを使用して関数を定義する一般的な方法です。

構文

function 関数名(パラメータ1, パラメータ2, ...) {
  // 実行するコード
}

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

この関数は、2つの引数 ab を受け取り、その合計を返します。

関数式の書き方

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

構文

const 変数名 = function(パラメータ1, パラメータ2, ...) {
  // 実行するコード
};

const multiply = function(a, b) {
  return a * b;
};

関数式を使用すると、関数を匿名関数として定義できます。

関数の呼び出し方

関数を呼び出す基本的な方法

関数を呼び出すには、関数名の後に丸括弧を付けて実行します。

構文

関数名(引数1, 引数2, ...);

let sum = add(5, 3);
console.log(sum); // 出力: 8

引数を渡す方法

関数に引数を渡すことで、動的な値を処理できます。

function greet(name) {
  console.log(`こんにちは、${name}さん!`);
}

greet('太郎'); // 出力: こんにちは、太郎さん!

関数のパラメータと引数

パラメータの定義

パラメータは、関数が受け取る入力のプレースホルダーです。関数定義時に指定します。

function divide(a, b) {
  return a / b;
}

ここで、ab がパラメータです。

デフォルトパラメータ

パラメータにデフォルト値を設定することができます。引数が渡されなかった場合、そのデフォルト値が使用されます。

function greet(name = 'ゲスト') {
  console.log(`こんにちは、${name}さん!`);
}

greet(); // 出力: こんにちは、ゲストさん!

関数の戻り値

return文の使い方

return文を使用して、関数から値を返すことができます。

function square(n) {
  return n * n;
}

let result = square(4);
console.log(result); // 出力: 16

戻り値を利用する方法

戻り値は、変数に代入したり、他の関数の引数として使用できます。

function increment(n) {
  return n + 1;
}

let number = 5;
number = increment(number);
console.log(number); // 出力: 6

スコープと変数の寿命

ローカルスコープとグローバルスコープ

スコープは、変数や関数が有効な範囲を指します。

  • グローバルスコープ関数の外で宣言された変数は、プログラム全体で有効です。
  • ローカルスコープ関数内で宣言された変数は、その関数内でのみ有効です。

let globalVar = 'グローバル';

function testScope() {
  let localVar = 'ローカル';
  console.log(globalVar); // 出力: グローバル
  console.log(localVar);  // 出力: ローカル
}

testScope();

console.log(globalVar); // 出力: グローバル
console.log(localVar);  // エラー: localVar は定義されていません

スコープチェーン

ネストされた関数の場合、内側の関数は外側の関数の変数にアクセスできます。

function outer() {
  let outerVar = '外側';

  function inner() {
    let innerVar = '内側';
    console.log(outerVar); // 出力: 外側
    console.log(innerVar); // 出力: 内側
  }

  inner();
}

outer();

関数式と無名関数

関数式の活用方法

関数式を使うと、関数を変数に代入できるため、柔軟なコーディングが可能です。

const operations = {
  add: function(a, b) {
    return a + b;
  },
  subtract: function(a, b) {
    return a - b;
  }
};

console.log(operations.add(5, 3));      // 出力: 8
console.log(operations.subtract(5, 3)); // 出力: 2

無名関数の使いどころ

無名関数は、即時実行関数やコールバック関数として使用されます。

例: 即時実行関数

(function() {
  console.log('即時実行関数が実行されました');
})();

例: コールバック関数

setTimeout(function() {
  console.log('コールバック関数が実行されました');
}, 1000);

コールバック関数

関数を引数として渡す方法

関数は他の関数の引数として渡すことができます。

function execute(callback) {
  console.log('処理を開始します');
  callback();
}

execute(function() {
  console.log('コールバック関数が実行されました');
});

コールバック関数の実例

例: 配列のmapメソッド

let numbers = [1, 2, 3];
let doubled = numbers.map(function(num) {
  return num * 2;
});

console.log(doubled); // 出力: [2, 4, 6]

関数の再利用とモジュール化

コードの再利用性を高める方法

共通する処理を関数として定義し、必要な場所で呼び出すことで再利用性を高めます。

function formatDate(date) {
  return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
}

let today = new Date();
console.log(formatDate(today)); // 出力例: 2023-10-5

関数のモジュール化

モジュールを使用して、関数を別ファイルに分割し、必要な場所でインポートできます。

例: モジュールのエクスポートとインポート

// utils.js
export function greet(name) {
  return `こんにちは、${name}さん!`;
}

// main.js
import { greet } from './utils.js';

console.log(greet('太郎')); // 出力: こんにちは、太郎さん!

まとめ

学んだ内容の総括と次回予告

今回は、JavaScriptにおける関数の定義と呼び出しについて詳しく解説しました。関数の基本概念や役割、さまざまな定義方法、パラメータと引数、戻り値の扱い、スコープ、関数式、無名関数、コールバック関数、そして関数の再利用とモジュール化まで、多岐にわたるトピックを学びました。

関数はプログラミングの基礎であり、その理解はコードの品質と効率性に直結します。関数を適切に活用することで、より読みやすく、保守しやすいコードを書くことができます。

次回は、関数のさらなる活用法として関数式とアロー関数について詳しく解説します。アロー関数はES6で導入された新しい関数の記法で、コードをより簡潔に書くことができます。

関連記事

大阪のホームページ制作会社TREVOでは、最短2日で仮サイトを公開できるスピード対応や、SEO対策に強いオリジナルデザインの制作サービスを提供しています。

関連の記事

CONTACT

ホームページ制作・Web制作に関するご質問やご相談は、
下記フォームよりお問い合わせください。

無料のお見積りや初回のご相談も承っておりますので、「まだ検討中」「ちょっと話を聞いてみたい」といった段階でも大歓迎です。
現状のホームページ診断も無料で実施中です。

0120-83-8567
平日9:00~18:00まで 定休日:土 日 祝