Обе стрелки выведут один и тот же внешний this, а не объект c. В ES-модуле это undefined; в верхнеуровневом обычном браузерном script — window даже при 'use strict'.
Лексическое связывание this в стрелочных функциях
Обе стрелки выведут один и тот же внешний this, а не объект c. В ES-модуле это undefined; в верхнеуровневом обычном браузерном script — window даже при 'use strict'.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какие значения будут выведены в консоль при вызове методов c.a() и c.b(). Учтите, что код работает в строгом режиме и что у стрелочных функций this берётся из окружающего лексического окружения.
"use strict";
// рассуждение вслух более ценно чем верный ответ
const a = () => {
console.log(this);
};
const c = {
a,
b: () => {
console.log(this);
},
};
c.a();
c.b();
Ответ
Обе стрелки выведут один и тот же внешний this, а не объект c. В ES-модуле это undefined; в верхнеуровневом обычном браузерном script — window даже при 'use strict'.
Стрелочные функции не создают собственного this и не меняют его при вызове через точку. Директива строгого режима влияет на this обычных самостоятельных вызовов, но не превращает верхнеуровневое this classic script в undefined. Если весь фрагмент находится внутри другой функции, обе стрелки захватывают её контекст. Без указания оболочки выполнения более конкретный ответ был бы необоснованным.