Вы помещаете область действия функции в другую функцию, в основном.
Изобразите это:
<script>
document.onload = function(){
function foo(){
alert('bar');
}
};
foo();
</script>
Это факсимиле того, что вы пытаетесь достичь. Подобно тому, как переменные, определенные внутри функции, выходят за ее пределы, имена функций приобретают одинаковые характеристики.
Дополнительное примечание JavaScript не требует префикса $ в именах переменных (хотя это приемлемо для имен). Я не знал, пришли ли вы с PHP и просто привыкли или были в курсе.
Думал, что я сделаю свой комментарий ответом.