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
が出力されます。