JavaScriptのアロー関数が、通常の function で定義した関数と異なる点はどれですか?
1〜4キーで選択、Enterで回答できます
解説
正解は「アロー関数は自身の this を持たず」です。アロー関数は自分専用の this を作りません。そのため this(実行時に決まる「呼び出し元」を指す特別な値)は、アロー関数を書いた場所の外側からそのまま引き継がれます。this の違いを実際に見るconst timer = { name: 'タイマー', start() { setTimeout(function () { console.log(this.name); // undefined(this が呼び出し元に依存して変わる) }, 0); setTimeout(() => { console.log(this.name); // 'タイマー'(start() の this を引き継ぐ) }, 0); }, }; timer.start(); コールバック(後から呼ばれる関数)の中でオブジェクトのプロパティを触りたい場面で、アロー関数が重宝される理由がこれです。他の選択肢が誤りである理由「アロー関数は function 宣言と同じように巻き上げられ」は誤りです。アロー関数は const などの変数に代入して使うため、定義行より前で呼ぶと ReferenceError になります。「アロー関数の中では arguments オブジェクトを使って」も誤りです。アロー関数は arguments も持たないため、可変長引数は (...args) => のように残余引数で受け取ります。「アロー関数は new 演算子でインスタンス化でき」も誤りで、new を付けると TypeError になります。オブジェクトのメソッドに使うと期待どおり動かないconst obj = { name: 'A', hello: () => this.name } のように書くと、this はモジュールのトップレベルの値(多くの場合 undefined)を指してしまい、obj にはなりません。メソッドとして定義する場合は hello() { ... } の短縮記法を使ってください。同様に、this を要素に束縛したい DOM のイベントハンドラでもアロー関数は不向きです。参考アロー関数式 - JavaScript | MDNthis - JavaScript | MDN