Como JavaScript es un lenguaje prototipado, cuando declaras la segunda función, lo que estás haciendo es sobreescribir la primera.
Código HTML :
<!doctype HTML>
<html>
<head>
<script type="text/javascript">
function Hola() {
console.log('Hola 1');
}
function Hola() {
console.log('Hola 2');
}
Hola();
</script>
</head>
<body>
</body>
</html>
Eso imprime "Hola 2" en la consola.
Cuando escribes la declaración de una función como lo hice en el ejemplo, en realidad lo que ocurre es que agregas un método nuevo al objeto window. Entonces hacer esto:
Código Javascript :
window.Hola();
Es lo mismo que llamar solo a Hola().
Finalmente y para responder tu pregunta, JavaScript es un lenguaje con "garbage collector", eso significa que el propio lenguaje se encarga de liberar la memoria tanto al finalizar el programa como cuando sobreescribes un método o variable. Así que no tienes que preocuparte de liberar memoria explícitamente.