Анализ работы метода getFilteredUsers в объекте userService

В strict mode callback filter получит this=undefined и бросит TypeError. В нестрогом script, если глобального currentFilter нет, вернётся []; active берётся не из userService.

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

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

В strict mode callback filter получит this=undefined и бросит TypeError. В нестрогом script, если глобального currentFilter нет, вернётся []; active берётся не из userService.

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

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

Условие

Вопрос: какое значение будет выведено в консоль после выполнения программы?

const userService = {
    currentFilter: 'active',
    users: [
        { name: 'Alex', status: 'active' },
        { name: 'Nick', status: 'deleted' },
    ],
    getFilteredUsers: function () {
        return this.users.filter(function (user) {
            return user.status === this.currentFilter;
        });
    }
};

console.log(userService.getFilteredUsers());

Обратите внимание, что внутри функции‑колбэка, передаваемой в Array.prototype.filter, контекст this отличается от контекста метода getFilteredUsers. Нужно понять, как это влияет на результат фильтрации.

Ответ

В strict mode callback filter получит this=undefined и бросит TypeError. В нестрогом script, если глобального currentFilter нет, вернётся []; active берётся не из userService.

Обычная функция внутри filter не наследует this внешнего метода. Исправление — стрелка или явный thisArg:

getFilteredUsers: function () {
  return this.users.filter(user => user.status === this.currentFilter);
}

С такой заменой метод вернёт массив с Alex. При нестрогом исходном вызове this callback указывает на глобальный объект, поэтому его случайное свойство currentFilter способно изменить результат. Конкретное окружение важно; одинаковое содержимое объекта не делает привязку this автоматической.

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

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

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

Подробнее