Take a test:
It's because the latter function overwrites the previous one. If you try to log the function:
console.log(say);
It will return only:
function say() { alert( "BELOW" ); }
The "ABOVE" alert has been replaced with the "BELOW" alert. Similar to declaring a variable with the same name twice in the same scope - the latter would overwrite the former.
JSFiddle example.
Why? See http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html