Лексическое связывание this в стрелочных функциях

Обе стрелки выведут один и тот же внешний this, а не объект c. В ES-модуле это undefined; в верхнеуровневом обычном браузерном script — window даже при 'use strict'.

Короткий ответ

Что ответить на собеседовании

Обе стрелки выведут один и тот же внешний 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. Если весь фрагмент находится внутри другой функции, обе стрелки захватывают её контекст. Без указания оболочки выполнения более конкретный ответ был бы необоснованным.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее