Как сохранить this.firstName в debounced-вызове?

Привяжите исходную обычную функцию к user до передачи в debounce: debounce(function () { console.log(this.firstName); }.bind(user), 200). Сам debounce изменять не нужно.

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

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

Привяжите исходную обычную функцию к user до передачи в debounce: debounce(function () { console.log(this.firstName); }.bind(user), 200). Сам debounce изменять не нужно.

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

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

Условие

Дана неизменяемая функция debounce(fn, ms), возвращающая обычную функцию: она сбрасывает предыдущий таймер и вызывает fn(...args) после паузы без сохранения this. Есть user = {firstName:'Ира'}. Нужно один раз создать debounced-обработчик, который печатает имя user даже при отделённом вызове.

Ответ

Привяжите исходную обычную функцию к user до передачи в debounce: debounce(function () { console.log(this.firstName); }.bind(user), 200). Сам debounce изменять не нужно.

Альтернатива для фиксированного объекта — стрелка debounce(() => console.log(user.firstName), 200): она явно читает user, а не пытается получить this от таймера. Создавайте обёртку один раз, иначе у каждого вызова будет независимый таймер и подавление серии не сработает. Если требуется динамический получатель каждого вызова, контракт debounce уже должен сохранять this отдельно.

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

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

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

Подробнее