Если функция logHello написана как стрелочная и вызывается через fn.call(this, ...args) внутри runOnce, что будет с контекстом this? Что нужно изменить в функции logHello, чтобы контекст корректно пробрасывался?

Стрелочная logHello игнорирует thisArg, переданный через call: её this уже захвачен лексически. Для динамического контекста нужна обычная функция.

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

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

Стрелочная logHello игнорирует thisArg, переданный через call: её this уже захвачен лексически. Для динамического контекста нужна обычная функция.

Подробный разбор

Ответ с пояснениями

Стрелочная logHello игнорирует thisArg, переданный через call: её this уже захвачен лексически. Для динамического контекста нужна обычная функция.

Например, function logHello() { return this.name; } получит контекст от fn.call(this, ...args) в обёртке. Также сама runOnce-обёртка должна сохранять this вызывающей стороны, а не быть стрелкой, если нужен динамический receiver. Bind стрелки тоже не заменяет захваченный this.

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

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

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

Подробнее