Потому что в такой записи функция является выражением. Именованным выражением, если быть точнее. А имя именованного функционального выражения является локальным для этого выражения, и доступно только внутри.
Значение этого выражения никуда не присваивается, а используется только вычисления условия. Функция у нас приводится к истине, условие выполняется. А внутри идет обращение к несуществующему в этом скоупе идентификатору f
, вылетает undefined или Error в стрикт-режиме.