こう 聞かれます
- 「アロー関数と function で
書いた 関数の 違いは 何ですか」 - 「JavaScript の this は、
何を 指しますか」 - 「オブジェクトの
メソッドを アロー関数で 書くと、 何が 起きますか」
面接官が 見ている点
- 「短く書ける」で
止めず、 this の 決まり方の 違いまで話せるか - function の this は
呼び方で 変わる、と例で示せるか - コールバックと
メソッドで、 どちらを 選ぶかを 理由つきで言えるか
短い答え
- function で
書いた 関数の this は、 呼ばれ方で 決まり、 obj.f()と呼べば obj を 指します。 - アロー関数は
自分の this を 持たず、 書いた 場所の 外側の this を そのまま 使います。 - その
ためコールバックには アロー関数、 オブジェクトの メソッドには function の 形を 使い分けます。
少し 詳しい答え
function の this は 呼び方で変わる
同じ
JavaScript
"use strict";
function show() {
return typeof this;
}
const obj = { show };
console.log(obj.show());
console.log(show());object
undefinedobj.show() では this が obj に"use strict" の
アロー関数は 外側の this を使う
メソッドの
JavaScript
const team = {
name: "A班",
members: ["Aya", "Ken"],
list() {
return this.members.map(
(m) => `${m}は${this.name}`
);
},
};
console.log(team.list());[ 'AyaはA班', 'KenはA班' ]ここを function で
ほかにも、
作った
よく ある間違い
- 「アロー関数は
短く 書けるだけ」と言う 一番の 違いは this です。 外側の this を 使うか どうかで、 選ぶ 場面が 変わります - オブジェクトの
メソッドを アロー関数で書く this が その オブジェクトを 指さないので、 this.nameが読めません - 「this は
書いた 場所で 決まる」と、 function にも言う function の this は、 呼ばれ方で 決まります。 書いた 場所で 決まるのは アロー関数です
深掘りの問い
- 「メソッドを
取り出して 渡すと this が 外れるのを、 どう 防ぎますか」 bindで this を固定するか、 アロー関数で 包んで obj.f()の形で 呼ぶ、 と答えます - 「アロー関数に bind や call で this を
渡せますか」渡しても this は 変わりません。 外側の this を 使い続けます - 「ボタンの addEventListener に
渡す関数では、 this は どうなりますか」 function で 書くと、 イベントの 付いた 要素を 指します。 アロー関数なら 外側の this のままです