no se sobre escriben. de hecho, hay funciones y propiedades nativas que estan protegida contra escritura. de todos modos, no es el caso actual. lo que aquí sucede es el orden en que javascript localiza la función a invocar dentro del
scope chain. más bien el identificador, o sea el nombre de las variables o funciones. el mecanismo es bien simple, javascript utiliza el primer identificador que encuentre a partir del nivel de scope actual hacia el
exterior. si bien sabemos que cada función genera un scope distinto, resulta que el HTML DOM parece tener uno en cada nivel del documento. o sea,
document, document.forms[], document.forms[].elements[] tienen su propio scope. es algo así como un namespace.
un ejemplo de lo que quiero decir:
Código:
<script>
function reset(){
alert('reset');
}
</script>
<form>
<input type="button" onclick="reset()" value='reset'>
</form>
el botón reset aquí invocará la función reset del form y no la función con el alert.