JS JavaScript  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Функциональный стиль в JavaScript

Профессиональный тест о функциях высшего порядка, неизменяемости, композиции и контроле побочных эффектов. Задания требуют оценивать не лозунги, а контракты: где копия поверхностна, когда мемоизация неверна и почему цепочка преобразований может ухудшить производительность.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. В тесте 30 вопросов и 85 минут; код лучше читать построчно, не полагаясь на первое впечатление. После завершения откроются общий процент, 6 тематических шкал и объяснение каждого решения.
Вопрос 1 из 30
Что вернёт makeAdder(2)(5)?
JavaScript
const makeAdder = x => y => x + y;
console.log(makeAdder(2)(5));
Вопрос 2 из 30
Чем частичное применение отличается от каррирования?
JavaScript
const partial = (fn, ...fixed) => (...rest) => fn(...fixed, ...rest);
const add3 = (a, b, c) => a + b + c;
const add1 = partial(add3, 1);
Вопрос 3 из 30
Почему Array.prototype.map ожидает чистый callback не формально, а практически?
JavaScript
let total = 0;
const prices = items.map(item => {
  total += item.price;
  return item.price;
});
Вопрос 4 из 30
Какой comparator нарушает контракт Array.prototype.sort?
JavaScriptКомпаратор сортировки
const values = [3, 1, 2];
values.sort(/* выберите comparator из вариантов */);
Вопрос 5 из 30
Когда функция высшего порядка ухудшает дизайн?
Вопрос 6 из 30
Изменится ли исходный user?
JavaScript
const user = { name: "A", address: { city: "Riga" } };
const next = { ...user };
next.address.city = "Tallinn";
console.log(user.address.city);
Вопрос 7 из 30
Как обновить city, сохранив остальные ссылки там, где данные не менялись?
JavaScript
function renameCity(user, city) {
  // Выберите неизменяемое обновление только пути address.city.
}
Вопрос 8 из 30
Что защищает Object.freeze(user)?
JavaScript
const user = Object.freeze({ tags: [] });
user.tags.push("new");
Вопрос 9 из 30
Почему JSON-клонирование не универсальная глубокая копия?
Вопрос 10 из 30
Какой плюс структурного разделения?
Вопрос 11 из 30
Каков порядок вызовов в pipe(f,g,h)(x)?
JavaScript
const pipe = (...fns) => value => fns.reduce((v, fn) => fn(v), value);
pipe(f, g, h)(x);
Вопрос 12 из 30
Почему эта композиция сломается?
JavaScript
const read = pipe(JSON.parse, value => value.trim());
read("{\"name\":\"Ada\"}");
Вопрос 13 из 30
Как написать async pipe, чтобы каждый шаг получил развёрнутое значение?
JavaScript
const pipeAsync = (...fns) => value => {
  // Выберите реализацию, которая последовательно ожидает каждый шаг.
};
Вопрос 14 из 30
Когда именованная промежуточная переменная лучше длинной композиции?
Вопрос 15 из 30
Почему универсальный compose с автоматическим catch может быть опасен?
Вопрос 16 из 30
Какая версия проще тестируется детерминированно?
JavaScript
const isExpired = (expiresAt, now) => expiresAt <= now;
console.log(isExpired(deadline, fixedNow));
Вопрос 17 из 30
Почему Math.random внутри расчёта мешает повторяемости?
JavaScript
function choose(items, random = Math.random) {
  return items[Math.floor(random() * items.length)];
}
Вопрос 18 из 30
Что означает «functional core, imperative shell»?
Вопрос 19 из 30
Когда повтор чистой функции безопасен?
Вопрос 20 из 30
Почему отправка письма не должна происходить внутри selector состояния?
Вопрос 21 из 30
Как tap помогает диагностировать pipe?
JavaScript
const tap = fn => value => { fn(value); return value; };
pipe(parse, tap(console.log), validate)(input);
Вопрос 22 из 30
Какое свойство у корректного reverse для массива?
JavaScript
const reverseCopy = xs => [...xs].reverse();
assert.deepEqual(reverseCopy(reverseCopy(xs)), xs);
Вопрос 23 из 30
Почему toEqual важнее toBe для новой неизменяемой структуры?
JavaScriptПроверка структуры и ссылки
const next = { ...state, count: state.count + 1 };
expect(next).toEqual({ ...state, count: state.count + 1 });
expect(next).not.toBe(state);
Вопрос 24 из 30
Как минимизировать ошибку reduce?
Вопрос 25 из 30
Почему snapshot большой цепочки недостаточен?
Вопрос 26 из 30
Почему три последовательных map создают лишнюю работу?
JavaScript
const result = items
  .map(read)
  .map(normalize)
  .map(format);
Вопрос 27 из 30
Когда memoize возвращает неверные данные?
JavaScript
const price = memoize(productId => api.currentPrice(productId));
Вопрос 28 из 30
Какой риск у бесконечного Map-кэша memoize?
JavaScript
const cache = new Map();
const memo = key => cache.has(key) ? cache.get(key) : cache.set(key, compute(key)).get(key);
Вопрос 29 из 30
Когда обычный for-цикл оправдан вместо цепочки filter/map/reduce?
Вопрос 30 из 30
Что ухудшает сопровождение функционального кода сильнее всего?

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу