В strict mode callback filter получит this=undefined и бросит TypeError. В нестрогом script, если глобального currentFilter нет, вернётся []; active берётся не из userService.
Анализ работы метода getFilteredUsers в объекте 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 автоматической.