1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コールバック関数とかアロー関数(無名関数)って結局何?

1
Posted at

はじめに

本記事は 「JavaScriptのコードで時々出てくるコールバック関数って何?」、「名前だけ知ってるけど何やってるかよくわからない」、などと感じている方向けのものとなっています。

自分が実際にJavaScriptのコードを読んでいて混乱したところなどについて書いているので、参考になれば幸いです。

コールバック関数とは

簡単に言うと、「他の関数に渡されて、あとで呼び出される関数」 のこと。

callback() という特別な関数があるわけではないので注意。
変数として渡される関数をコールバック関数と呼ぶ。

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

function callFunction(callback) {
    callback();
}

callFunction(sayHello);

上のコード例だと、

  • function sayHello():通常の関数
  • function callFunction(func):コールバック関数を呼び出すための関数
  • callFunctionの中で呼び出されているfunc():コールバック関数

という感じになっている。

これだけでは良くわからないので、実際にcallFunction(sayHello)で実行されるプログラムをたどってみる。

1. callFunction(callback)が実行される

callFunctionが呼び出され、関数sayHelloが引数として渡される。
⇒この関数sayHelloが今回のコードではコールバック関数となっている。

2. callback()が実行される

callback()が呼び出される。この時、引数として渡されているのは関数sayHelloなので、関数sayHelloが実行される。

3. プログラム終了

コンソールに 「こんにちは」 が出力され、上のプログラムは終了する。



こうするとだいぶ分かりやすくなる。

例のコードは非常に単純なためあまり混乱しないが、次に紹介するアロー関数と同時に使用される事が多く、そうなると結構混乱しやすい。

アロー関数とは

コードを短く書くための記法。Pythonでいう、ラムダ関数のようなもの。

通常
function add(a, b) {
  return a + b;
}
アロー関数
const add = (a, b) => {
  return a + b;
};

functionを書かずに=>を使用するのが特徴。

コールバック関数&アロー関数

ここまでで紹介した2つは、同時に使用されることが非常に多い。代表例としては以下のsetTimeoutがある。

setTimeout(() => {
  console.log("3秒経ちました");
}, 3000);

ここでは() => { ... }の部分がアロー関数となっており、同時にsetTimeoutに渡されるコールバック関数にもなっている。

setTimeout(function () {
  console.log("3秒経ちました");
}, 3000);

アロー関数を使用しないで書くと上みたいな感じ。

さいごに

今回はJavaScirptのコードで頻出のコールバック関数とアロー関数について解説しました。

最初は理解するのに手間取る方かもしれませんが、コードを何度か見るうちに自然と慣れてきます。

ぜひ実際にコードを書いて試してみてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?