Представим что эти ваши фрагменты не в начале кода, а где-нибудь в середине.
В варианте №3 функция будет создана в самом начале, до выполнения самой первой строки. Вызывать ее можно в любом месте.
В вариантах №1 и №2 это не совсем функции, но "функциональные выражения". Они будут обработаны только когда до них дойдет интерпретатор, и попытка вызвать такую функцию раньше ее объявления приведет к ошибке.
В варианты №1 и №2 отличаются еще и тем, что одно из выражений анонимное. Ничего плохого в этом нет, но если у функции есть название, то намного удобнее читать код при отладке. В сообщении с ошибкой будет не только номер строки, но и название.