BFE.devでのAI解答例 - JavaScript クイズ
6. Arrow Function
以下が出力されます:
bfe
bfe
undefined
bfe
bfe
bfe
undefined
undefined
bfe
解説:
obj.a()はthis.devを返します。thisはobjを指し、obj.devはbfeなので、bfeが出力されます。obj.b()も同様にthis.devを返します。こちらはb()が略式関数で定義されているため、thisがobjを指すことが明示されています。obj.c()はアロー関数で定義されています。アロー関数内でthisを使っても、そのthisはアロー関数の外部のもの(ここではグローバルオブジェクト)を指します。グローバルオブジェクトにはdevプロパティがないため、undefinedが出力されます。obj.d()は、アロー関数がさらにネストしていますが、thisはobjを参照します。したがって、bfeが出力されます。obj.e()は、obj.b()を呼び出しています。先述のように、b()は略式関数で定義されており、thisがobjを指すことが明示されています。したがって、bfeが出力されます。obj.f()()は、obj.f()を実行した後に返される関数オブジェクトを再び実行します。obj.f()はthis.bを返す関数であり、thisはobjを参照します。その後、返された関数オブジェクトが実行されると、再びthisはobjを参照するため、bfeが出力されます。obj.g()はobj.c()を呼び出していますが、先述のようにc()はアロー関数で定義されており、thisはグローバルオブジェクトを参照するため、undefinedが出力されます。obj.h()()はobj.h()を実行した後に返される関数オブジェクトを再び実行します。obj.h()はthis.cを返す関数であり、再びthisはobjを参照します。その後、返された関数オブジェクトが実行されると、先ほどと同様にundefinedが出力されます。obj.i()()は、obj.i()を実行した後に返されるアロー関数が実行されます。アロー関数内のthisは、その外側にあるi()が呼び出されたときのthisを参照します。そのため、thisがobjになり、bfeが出力されます。