JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで関数をコールバックとして渡す方法

JavaScriptで関数をコールバックとして渡す

JavaScriptでは、関数は第一級オブジェクト(ファーストクラスオブジェクト)として扱われるため、他の値と同じように変数に代入したり、引数として別の関数に渡したりすることができます。このように引数として渡され、後から呼び出される関数をコールバック関数と呼びます。

コールバックを活用することで、処理の柔軟性が高まり、再利用可能なコードを書くことができます。以下は、add2() 関数を multiply9() 関数のコールバックとして渡すサンプルコードです。

コード例

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
   body {
      font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
   }
   .result {
      font-size: 20px;
      font-weight: 500;
      color: blueviolet;
   }
</style>
</head>
<body>
<h1>Passing a function as a callback</h1>
<div class="result"></div>
<button class="Btn">CLICK HERE</button>
<h3>Click on the above button to pass the add2() function as callback to multiply9() function</h3>
<script>
   let resEle = document.querySelector(".result");
   function add2(a) {
      return a + 2;
   }
   function multiply9(fn, num) {
      return fn(num) * 9;
   }
   document.querySelector(".Btn").addEventListener("click", () => {
      resEle.innerHTML = "The number returned = " + multiply9(add2, 12);
   });
</script>
</body>
</html>

コードの解説

このコードでは、次のような仕組みでコールバックが機能しています。

  • add2(a):受け取った値に 2 を加算して返すシンプルな関数です。
  • multiply9(fn, num):第一引数として関数そのものを受け取り、第二引数の値に対してその関数を実行し、結果を 9 倍して返します。ここがポイントで、fn(num) のように渡された関数を呼び出しています。

ボタンをクリックすると、add2 が括弧なしで(つまり関数参照として)multiply9(add2, 12) の形で渡されます。add2(12) は 14 を返し、それを 9 倍した 126 が画面に表示されます。

実行結果

ページを開いた直後の表示:

JavaScriptで関数をコールバックとして渡す方法

「CLICK HERE」ボタンをクリックすると:

JavaScriptで関数をコールバックとして渡す方法

まとめ

関数をコールバックとして渡す際の重要なポイントは、関数名の後に () を付けずに関数そのものを参照として渡すことです。add2() と書くと関数が即座に実行されてしまい、戻り値が渡されてしまうため注意が必要です。このテクニックは、イベントリスナーや配列メソッド(mapfilter など)、非同期処理など、JavaScript開発のあらゆる場面で応用されます。

  1. JavaScriptの関数プロトタイプとは?仕組みと使い方を解説

    JavaScriptで作成されたすべての関数には、JavaScriptエンジンによって自動的にprototypeプロパティが追加されます。このprototypeプロパティはオブジェクトであり、デフォルトではconstructorプロパティを含んでいます。関数のプロトタイプには、以下のようにしてアクセスできます。functionName.prototypeコンストラクタ関数を使ってオブジェクトを生成する場合、このprototypeプロパティを活用することで、同じコンストラクタから作成された複数のオブジェクト間でメソッドやプロパティを効率的に共有することができます。これにより、各インスタンスごとに

  2. JavaScriptでのメソッド借用:call()・apply()・bind()の使い方を解説

    JavaScriptでは、call()、apply()、bind()という3つのメソッドを使うことで、あるオブジェクトが持つメソッドを別のオブジェクトが「借用」できます。これは、本来そのメソッドを持たないオブジェクトに対して、thisの参照先を差し替えてメソッドを実行できる便利なテクニックです。 3つのメソッドの違い call():引数をカンマ区切りで個別に渡し、即座に関数を実行します。 apply():引数を配列(または配列風オブジェクト)として渡し、即座に関数を実行します。 bind():thisを固定した新しい関数を返すだけで、即座には実行されません。返された関数は後から好きなタイミン