JavaScriptの関数のいろいろな呼び出し方を徹底解説!違いと使い分けをマスターしよう!

こんにちは。ゆうせいです。

JavaScriptでは関数を定義したあと、それを「呼び出す」ことで実行できます。でも実は、関数の呼び出し方にはいろいろなパターンがあるって知っていましたか?

たとえば、直接呼び出す方法もあれば、イベントを使う方法、オブジェクト経由、そしてコンストラクタや即時実行などもあります。

今回は、JavaScriptでよく使われる関数の呼び出し方6パターンを、初心者向けにわかりやすく解説します!


1. 通常の呼び出し(関数名を使う)

いちばん基本的な呼び出し方です。

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

greet(); // ← 呼び出し

  • 関数名に()をつけるだけ
  • 最もよく使う形式

2. オブジェクトのメソッドとして呼び出す

関数をオブジェクトのプロパティ(メソッド)として持たせて呼び出すパターンです。

const person = {
  name: "ゆうせい",
  greet: function() {
    console.log("こんにちは、" + this.name);
  }
};

person.greet(); // "こんにちは、ゆうせい"

  • this はそのオブジェクトを指すようになる
  • オブジェクト指向の設計でよく使われる

3. イベントハンドラとして呼び出す

HTMLのボタンなどでユーザーの操作に応じて関数を呼び出すケースです。

<button onclick="sayHello()">クリックして!</button>

function sayHello() {
  alert("こんにちは!");
}

あるいはJavaScriptからイベントを登録する方法もあります:

document.getElementById("myBtn").addEventListener("click", sayHello);

  • イベントが起こったときに実行される
  • ()(カッコ) をつけないことで、関数そのものを渡している点に注意!

4. 即時実行関数(IIFE:Immediately Invoked Function Expression)

関数を定義すると同時に実行する特別なパターンです。

(function() {
  console.log("これが即時実行関数です!");
})();

  • 定義と同時に1回だけ実行される
  • グローバルスコープを汚さずに使える
  • モジュール化の古典的テクニックとしてよく使われた

5. call()apply() を使って呼び出す

関数を特定の this を指定して呼び出す方法です。

function greet() {
  console.log("Hello, " + this.name);
}

const user = { name: "たろう" };

greet.call(user);  // Hello, たろう
greet.apply(user); // 同じ結果

  • call() は引数をカンマ区切りで渡す
  • apply() は配列で渡す
  • 関数の実行コンテキスト(thisの中身)を指定したいときに便利

6. bind() を使って新しい関数を作ってから呼び出す

const greet = function() {
  console.log("Hi, " + this.name);
};

const person = { name: "さくら" };

const boundGreet = greet.bind(person);
boundGreet(); // Hi, さくら

  • bind() は呼び出しそのものではない
  • 新しい関数を返す → あとで呼び出す(遅延実行)

7. コンストラクタ関数として new で呼び出す

function Person(name) {
  this.name = name;
}

const user = new Person("まこと");

console.log(user.name); // まこと

  • new をつけて関数を呼び出すと「インスタンス」が作られる
  • このとき this新しく作られたオブジェクトになる

まとめ表で復習!

呼び出し方書き方特徴
通常の呼び出しfunc()基本的な呼び出し
オブジェクトのメソッドobj.method()this がオブジェクトを指す
イベントハンドラelement.onclick = funcイベント発生時に実行
即時実行関数(IIFE)(function(){})()定義してすぐに1回だけ実行
call / applyfunc.call(obj)this を明示的に指定
bindfunc.bind(obj)this を固定した新しい関数を生成
コンストラクタ呼び出しnew Func()オブジェクトを生成(thisが新規オブジェクト)

今後の学習の指針

  • this の動きに注目して、いろいろな呼び出し方を試してみよう!
  • イベントやコールバックの中での関数呼び出しに慣れよう
  • 即時実行関数や bind() は、モジュール化や非同期処理の場面で役立つ!

わからない例があれば、ぜひコードと一緒に質問してみてくださいね!実際に書いて動かすことで、ぐっと理解が深まりますよ!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。