Стрелочная logHello игнорирует thisArg, переданный через call: её this уже захвачен лексически. Для динамического контекста нужна обычная функция.
Если функция logHello написана как стрелочная и вызывается через fn.call(this, ...args) внутри runOnce, что будет с контекстом this? Что нужно изменить в функции logHello, чтобы контекст корректно пробрасывался?
Стрелочная logHello игнорирует thisArg, переданный через call: её this уже захвачен лексически. Для динамического контекста нужна обычная функция.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Стрелочная logHello игнорирует thisArg, переданный через call: её this уже захвачен лексически. Для динамического контекста нужна обычная функция.
Например, function logHello() { return this.name; } получит контекст от fn.call(this, ...args) в обёртке. Также сама runOnce-обёртка должна сохранять this вызывающей стороны, а не быть стрелкой, если нужен динамический receiver. Bind стрелки тоже не заменяет захваченный this.