カテゴリ: JavaScript 更新日: 2026/06/22

JavaScriptのアロー関数のthis完全ガイド!初心者でもわかる挙動と使い方

JavaScriptのアロー関数のthisの挙動をわかりやすく解説
JavaScriptのアロー関数のthisの挙動をわかりやすく解説

先生と生徒の会話形式で理解しよう

生徒

「先生、JavaScriptのアロー関数って普通の関数と何が違うんですか?」

先生

「アロー関数の大きな特徴はthisの扱い方です。普通の関数は呼ばれた場所によってthisが変わりますが、アロー関数は定義された場所のthisをそのまま使います。」

生徒

「それって具体的にどういうことですか?」

先生

「例えばオブジェクトの中で関数を呼ぶと、普通の関数ではthisはそのオブジェクトを指します。でもアロー関数だと、外側のthis、つまり定義された場所のthisを使うんです。」

1. アロー関数とは?

1. アロー関数とは?
1. アロー関数とは?

JavaScriptのアロー関数は、ES6から導入された短い書き方の関数です。functionキーワードを使わずに書け、コードを簡潔にできます。


const add = (a, b) => {
  return a + b;
};
console.log(add(2, 3)); // 5

アロー関数の特徴は、簡単に書けることだけでなく、thisの扱い方が通常の関数と違う点にあります。

2. 通常の関数のthisの挙動

2. 通常の関数のthisの挙動
2. 通常の関数のthisの挙動

通常の関数では、thisは関数が呼ばれた「場所」によって変わります。オブジェクトのメソッドとして呼べばそのオブジェクトを指し、単独で呼べばグローバルオブジェクト(ブラウザならwindow)を指します。


function normalFunc() {
  console.log(this);
}
normalFunc(); // window(ブラウザの場合)

const obj = {
  name: "Alice",
  greet: normalFunc
};
obj.greet(); // { name: "Alice", greet: f }

このように、通常の関数では呼び出し方によってthisの値が変わります。

3. アロー関数のthisの特徴

3. アロー関数のthisの特徴
3. アロー関数のthisの特徴

アロー関数では、thisは「定義された場所」のthisを使います。呼び出し方に関係なく、外側のthisを参照します。


const obj = {
  name: "Bob",
  greet: () => {
    console.log(this.name);
  }
};
obj.greet(); // undefined

この例では、アロー関数はobjthisを使わず、外側のthis(グローバル)を参照するため、名前は取得できません。

4. オブジェクト内でのアロー関数の使い方

4. オブジェクト内でのアロー関数の使い方
4. オブジェクト内でのアロー関数の使い方

アロー関数はオブジェクトのメソッドとして使う場合、外側のthisが必要なケースに便利です。特にコールバック関数の中で役立ちます。


const obj = {
  name: "Charlie",
  hobbies: ["読書", "プログラミング"],
  showHobbies: function() {
    this.hobbies.forEach(hobby => {
      console.log(`${this.name}の趣味: ${hobby}`);
    });
  }
};
obj.showHobbies();
// Charlieの趣味: 読書
// Charlieの趣味: プログラミング

ここでは、forEachの中でアロー関数を使うことで、this.nameが正しくobjを指します。

5. イベントリスナーでのthisとアロー関数

5. イベントリスナーでのthisとアロー関数
5. イベントリスナーでのthisとアロー関数

ブラウザでのイベント処理でもアロー関数のthisは便利です。通常の関数ではイベント対象の要素をthisで取得できますが、アロー関数を使うと外側のthisを使えます。


const button = document.querySelector("#myButton");
button.addEventListener("click", () => {
  console.log(this); // グローバルオブジェクト
});

イベント内でオブジェクトのthisを保持したい場合は、通常の関数を使いましょう。

6. アロー関数とコンストラクタ関数

6. アロー関数とコンストラクタ関数
6. アロー関数とコンストラクタ関数

アロー関数はコンストラクタ関数として使うことはできません。なぜなら、アロー関数には自分のthisがないため、newで呼ぶとエラーになります。


const Person = (name) => {
  this.name = name;
};
const p = new Person("David"); // エラー

コンストラクタとして使う場合は、通常の関数を使いましょう。

7. アロー関数のまとめポイント

7. アロー関数のまとめポイント
7. アロー関数のまとめポイント
  • アロー関数は定義場所のthisを使う
  • メソッドとしてオブジェクトに直接割り当てる場合は注意が必要
  • コールバック関数や配列操作で便利
  • コンストラクタ関数としては使えない

8. アロー関数の使いどころ例

8. アロー関数の使いどころ例
8. アロー関数の使いどころ例

非同期処理や配列操作、簡単な短い関数などでアロー関数は非常に便利です。


const numbers = [1, 2, 3];
const squares = numbers.map(n => n * n);
console.log(squares); // [1, 4, 9]

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

このように、簡潔でthisの扱いを気にせず書ける場面で役立ちます。

まとめ

まとめ
まとめ

今回の記事では、JavaScriptのアロー関数の基本からthisの挙動、オブジェクト内やイベントリスナーでの使い方、コンストラクタ関数としての注意点まで幅広く解説しました。アロー関数は短い構文で書けるだけでなく、特にthisのスコープの固定という特徴があります。通常の関数では呼び出し方によりthisが変わりますが、アロー関数は定義された場所のthisを保持するため、配列操作やコールバック関数、非同期処理の中で便利に使えます。

オブジェクトのメソッドとして使う場合は、外側のthisが参照されるため、場合によっては通常の関数を使った方が適切です。また、アロー関数はコンストラクタとして利用できないため、newでインスタンスを作る場合は通常の関数を用いる必要があります。イベントリスナーでは、アロー関数を使うと外側のthisを保持でき、短く簡潔なコードを書くことが可能です。逆にイベントのターゲット要素をthisで参照したい場合は、従来の関数を使う必要があります。

まとめると、アロー関数は以下のポイントを押さえると理解が深まります。

  • 定義場所のthisを使う
  • オブジェクトのメソッドとして割り当てる場合は挙動に注意
  • 配列操作やコールバック関数で便利
  • コンストラクタ関数としては使えない
  • 非同期処理や短い関数に向いている

サンプルとして、配列の要素を二乗する処理や、3秒後にメッセージを表示する非同期処理も紹介しました。これらの例から、アロー関数が短く書けるだけでなく、thisを固定できる利便性がわかります。

 const numbers = [1, 2, 3]; const squares = numbers.map(n => n * n); console.log(squares); // [1, 4, 9]
setTimeout(() => {
console.log("3秒経過しました");
}, 3000);

このようにアロー関数は、コードを簡潔に保ちながら、特にthisの扱いに柔軟性を持たせたい場合に役立つ関数です。使いどころを理解し、通常の関数との違いを意識することで、より安全で読みやすいJavaScriptコードを書くことができます。

先生と生徒の振り返り会話

生徒

「先生、アロー関数のthisの扱い方、やっとわかりました。定義した場所のthisを使うんですね。」

先生

「その通りです。例えばオブジェクトの中でforEachなどのコールバック関数を使うとき、アロー関数を使えば外側のthisをそのまま参照できます。」

生徒

「なるほど。イベントリスナーではどう使えばいいですか?」

先生

「イベントリスナーでも、アロー関数を使うと外側のthisを保持できます。ただし、クリックした要素自体をthisで扱いたい場合は通常の関数を使う必要があります。」

生徒

「あ、だからオブジェクトのメソッドにアロー関数を直接割り当てると、思ったthisにならないんですね。」

先生

「その通りです。アロー関数の特徴を理解して、適材適所で使い分けることが大切です。短く簡潔に書けるので、配列操作や非同期処理では特に便利ですよ。」

生徒

「先生、理解しました。通常の関数とアロー関数を場面に応じて使い分けます!」

カテゴリの一覧へ
新着記事
New1
JavaScript
JavaScriptのスコープとは?ローカル変数・グローバル変数の違いと使い分け
New2
TypeScript
TypeScriptで型の合成時に発生する型エラーの対処法を徹底解説!初心者にもわかりやすく解説
New3
TypeScript
TypeScriptでAPI呼び出しをラップするユーティリティ関数の設計完全ガイド!初心者向けにAxiosやFetchの使い方を解説
New4
TypeScript
TypeScriptのMapped Typesとインターフェースの連携方法を徹底解説!初心者でも理解できる型変換の基本
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのループで無限ループが起きる原因と対策を初心者向けに徹底解説!
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.3
Java&Spring記事人気No3
JavaScript
JavaScriptの文字列の長さを取得する(lengthプロパティ)
No.4
Java&Spring記事人気No4
TypeScript
TypeScriptのファイル分割とimport/exportの基本を徹底解説!初心者でも安心のやさしい入門
No.5
Java&Spring記事人気No5
TypeScript
TypeScriptでコメントを書く正しい書き方と使い分け【初心者向けにやさしく解説】
No.6
Java&Spring記事人気No6
JavaScript
JavaScriptのプリミティブ型と参照型の違いを初心者向けに解説
No.7
Java&Spring記事人気No7
TypeScript
TypeScriptの始め方:開発環境の構築手順【初心者向け】
No.8
Java&Spring記事人気No8
TypeScript
TypeScriptでパスエイリアスを設定する方法!baseUrlとpathsでコードをスッキリ整理