Вопрос проверяет базовое понимание типов данных и способов защиты от некорректных аргументов.
Самый надёжный способ — использовать typeof. Для функций он возвращает строку 'function'. Это стандартное поведение языка. Проверка проста и быстра. Её достаточно в большинстве случаев.
Проверка аргументов — важная часть защитного программирования, особенно в утилитарных функциях.
if (typeof callback !== 'function') {
throw new TypeError('Argument must be a function')
}
Стандартное поведениеtypeof корректно определяет функции.
Простота и читаемость
Проверка легко понимается при чтении кода.
Предсказуемость
Работает одинаково во всех средах.
instanceof Function зависит от контекста выполнения
проверка через Object.prototype.toString избыточна
Для проверки, что аргумент является функцией, достаточно использовать typeof. Это самый простой и надёжный способ.