Как называется функция, которая при вызове ведет себя определенным образом
Что проверяют
Формулировка размытая, и чаще всего это проверка словаря: знаете ли вы названия видов функций в JavaScript и их отличия. Заодно смотрят, умеете ли вы уточнить вопрос вместо угадывания. Следом обычно просят пример кода или разницу между колбэком и функцией высшего порядка.
Как отвечать
Начните с уточнения: «Вы про функцию, которая всегда даёт одинаковый результат, или про ту, что вызывается другой функцией?» Затем покажите основные варианты и их признаки:
- чистая функция: при одних и тех же аргументах возвращает одно и то же и не имеет побочных эффектов. На этом держатся редьюсеры и мемоизация в React;
- колбэк: функция, переданная аргументом, чтобы её вызвал кто-то другой: обработчик события, функция в
setTimeout, аргументthen; - функция высшего порядка: принимает или возвращает функцию, например
map,filter,debounce; - замыкание: функция, которая помнит переменные внешней области видимости после её завершения. На замыканиях построены счётчики,
debounceи хуки; - IIFE: вызывается сразу при объявлении,
(() => { ... })(). Раньше так изолировали область видимости, сейчас это делают модули; - функция-конструктор: при вызове через
newсоздаёт объект и связывает с нимthis, внутри доступенnew.target; - генератор:
function*при вызове не выполняет тело, а возвращает итератор, код идёт порциями до каждогоyield.
Если имелось в виду «ведёт себя по-разному в зависимости от способа вызова», речь о this: у обычной функции он определяется в момент вызова, стрелочная берёт его из внешней области, а call, apply и bind задают его явно.
Где спотыкаются
Отвечают первым пришедшим словом, чаще «колбэк», и не проверяют, то ли спросили. Пять секунд на уточнение стоят дешевле неверного ответа.
Путают колбэк и функцию высшего порядка. map это функция высшего порядка, а стрелка, которую вы в неё передали, колбэк.
Называют чистой функцию, которая не мутирует аргументы, но внутри читает Date.now(), Math.random() или делает запрос. Результат зависит не только от аргументов, значит функция уже не чистая.