Практическая разница в приведенном вами примере очень мала.Разница действительно во время компиляции.Стоит отметить, что в первом случае, f = function, вы можете в любое время переопределить значение f, тогда как во втором случае переопределение f вызовет ошибку компилятора.
Общие рекомендации:используйте второе.
Надеюсь, что поможет.