Well, what would you do instead? It's an interpreted language. When you type "foofunction" at a prompt, you don't want it to wait around in case you define that to have meaning later.
You probably want the interpreter to be smart: "Am I loading a script from a file, or am I receiving instructions interactively on the command-line?" But now there's two modes of execution, and code in a bash script won't work if you type it into the prompt yourself. That's a bit uncomfortable.
One of my main complaints with bash.. the file is evaluated in order - you can't call a function on the line before it's declared.
This fails:
Basically you have to write your entire script in reverse, and i'm unaware of a good way to get around it.