В общем случае да - как минимум на создания контекста вызова, но после оптимизации может и не тратить, identity функция (функция просто возвращающая свой аргумент, как Ваш cb) хорошо инлайнится, тут вопрос в том - инлайнится ли функция, в которую Вы ее передаете.
Для понимания, нужно понимать, что v8 делает с кодом под капотом:
Когда платформа (браузер, node.js) только загрузила исходный код в v8, то выполняет его с помощью интерпретатора Ignition, а заодно анализирует это выполнение. На этом этапе весь код выполняется как есть.
Функции которые вызвались 2-3 раза отправляются в оптимизирующий JIT компилятор TurboFan, который скомпилирует из JS машинный код и сделает множество оптимизаций. В частности он может инлайнить некоторые функции (но не все).
Например, если при анализе кода выяснится, что некая функция f0 постоянно вызывает f1 передавая ей Ваш cb, и при этом f1 чистая функция - то f1 скорее всего заинлайнится в f0, а вызов cb просто заменится на свой аргумент. Но опять же, все зависит от Вашего кода и на сколько он оптимизируемый.
В любом случае identity функция очень легкая