JavaScript

【JavaScript】無名関数とアロー関数とイベントリスナーのthis

※当サイトにはプロモーションが含まれています。

投稿日:2019年7月29日 更新日:

1. はじめに

あるHTMLにおいて、以下のようにボタンが存在しており、このボタンのクリックイベントに対してイベントリスナーを登録するとします。

<button id="btn">ボタン</button>

このとき、無名関数 function(){ ... } を使う場合と、アロー関数 () => { ... } を使う場合とで、this の扱いが違うので注意しましょうというお話です。

2. イベントリスナーの登録

無名関数を使う場合


document.querySelector('#btn').addEventListener('click', function() {

  // this は button になります

});

こちらの場合、無名関数の中に記述した this は、実行時にはボタン要素(id=”btn”)となります。JavaScript の実行エンジンが、こちらに気を遣ってくれてわざわざ切り替えてくれるイメージです。

アロー関数を使う場合


document.querySelector('#btn').addEventListener('click', () => {

  // this は window になります

});

こちらの場合、アロー関数の中に記述した this は、実行時には window になります。より正確に言うと、この記述部分が実行されたときのコンテキスト(オブジェクト)が this に束縛されます。たいていは windowsオブジェクトだろうということです。

3. まとめ

2つを比べた場合、無名関数を使った方が便利なことが多いのではないでしょうか?

これは「新しい仕様であるアロー関数の方を使っていれば問題は起きにくいはず」という思考が一概に正しいと言えない一例だと思います。

イベントリスナーを登録する際には、「気を付けないといけないことがあったような…」となるくらいには覚えておいた方がよいでしょう。

4. 参考

📂-JavaScript

執筆者:labo


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

JavaScript

JavaScriptの特定の機能がどのバージョンで導入されたかを調べる

JavaScript の特定の機能がどのバージョンから導入されたか調べる方法を紹介します。

JavaScript

JavaScript のオプショナルチェーン

JavaScript のオプショナルチェーンを紹介します。

JavaScript

Yellow Fade の実装サンプル

JavaScript を使ったエフェクト処理の1つである Yellow Fade の実装サンプルを紹介します。

JavaScript

Webページ上でボタンを押したときに、必要な JavaScriptコードを読み込んで実行するサンプル

Webページ上でボタンを押したときに、必要な JavaScriptコードを読み込んで実行するサンプルコードを紹介します。

JavaScript

【JavaScript】 async / await の使い方

本サイトの JavaScriptで一定時間待ってから処理を開始する方法 でも少し使ったのですが、JavaScript の async / await の使い方についてこちらのページにまとめておきます。 …