Basically, because of hoisting, which pulls all function declarations to the top of the current scope, the interpreter is basically doing this:
function say() { alert( "ABOVE" ); }
function say() { alert( "BELOW" ); }
say();
That is why it always ends up alerting below