LoginSignup
4
4

More than 5 years have passed since last update.

【ES6 JavaScript】アロー関数とthisについて初心者エンジニアがまとめてみた

Posted at

ES6とは

ES2015というJavaScriptのバージョンのことです。
現在のモダン開発の殆どは、このバージョンに倣っています。

詳細の概要はこちらでご確認ください。

thisについて

以下のコードではthisの使い方について説明します。

例1

value = 'global value';

function printValue(){
  console.log(this.value); //上記のvalueキーの値を指している
}

let obj = {
  value: 'obj value',
  func: printValue
} //新たにobjオブジェクトを作成し、valueに'obj value'を格納

let obj2 = {
  value: 'obj2 value',
  func: printValue
}//obj2を作成し、valueに'obj2 value'を格納

obj.func();
obj2.func();

/* 
"obj value"
"obj2 value"
*/

例1デモ
printValue関数にconsole.log()をするように記述します。
ここで言う、this.valueは直前で変数定義したvalueを指します。
console.log(this.param);をオブジェクト定義後に単体で記述するとvalueの値('global value')が直接出力されます。

objとojb2オブジェクトでの定義は、各キー(valueとkey)に値を代入しています。
それぞれのオブジェクトを呼び出すには、obj.func();のように「valueキー.funcキー()」になります。
オブジェクトを呼び出すと、初めに定義したfunctionが呼ばれるため、console.log()されます。
その時の処理結果は、objとojb2オブジェクトで代入された値となります。

アロー関数(ES6以降)のthis

例2と似たようなコードにはなりますが、printValue関数を定義する際にアロー関数となっています。
変更点はfunctionがアロー関数に変更されただけになりますが、処理結果はそれぞれ一番始めに定義した、valueオブジェクトの値になります。

例2

value = 'global value';

let printValue = () => { //アロー関数
  console.log(this.value); //上記の変数valueの値を指している
}

let obj = {
  value: 'obj value',
  func: printValue
} //新たにobjオブジェクトを作成し、valueに'obj value'を格納

let obj2 = {
  value: 'obj2 value',
  func: printValue
}//obj2を作成し、valueに'obj2 value'を格納

obj.func();
obj2.func();

/* 
"global value"
"global value"
*/

例2デモ

MDNのカンファレンスの記載では、

アロー関数式 は、その名のとおり矢印を使って記述し、function 式より短い構文で同様な内容を記述することができます。なおthis, arguments, super, new.target を束縛しません。

とありますが、実行した結果から判断すると

例1のfunction・・・valueは再代入可能なためfunctionで定義される関数はthisを束縛しない
例2のvalue・・・valueは再代入が不可能なためアロー関数で定義される関数はthisを束縛する

ということになります。
最近のJavaScriptではES6が多く使われているので、thisを使う際はこの違いを把握する必要があります。

感想

ここ最近、【転職して痛感…】でもJavaScriptの基礎についてアウトプットしていますが、まだまだ知らないことが多すぎる。。。
がんばるじょ!

4
4
3

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
4
4