JavaScript permite definir funciones dentro de otras funciones:
<html> <head> <script type="text/javascript"> function generarListaOrdenada(vec) { function comienzo() { s='<ol>'; } function fin() { s=s+'</ol>'; } var s=''; comienzo(); var f; for(f=0;f<vec.length;f++) { s=s+'<li>'+vec[f]+'</li>'; } fin(); return s; } onload=function() { var opciones=['Opción a','Opción b','Opción c','Opción d']; document.getElementById('div1').innerHTML=generarListaOrdenada(opciones); } </script> </head> <body> <div id="div1"></div> </body> </html>
Como vemos en el ejemplo la función generarListaOrdenada contiene el
algoritmo propiamente dicho y además declara dos funciones llamadas
comienzo y fin.
Las funciones anidadas solo pueden ser llamadas desde el interior de
la función que las contiene. En este ejemplo la función
generarListaOrdenada tiene por objetivo generar un string con una serie
de marcas HTML que genere una lista ordenada.
Lo primero en la función generarListaOrdenada es declarar las dos funciones anidadas:
function comienzo() { s='<ol>'; } function fin() { s=s+'</ol>'; }
Pero lo primero que se ejecuta al llamar a la función generarListaOrdenada es:
var s=''; comienzo(); var f; for(f=0;f<vec.length;f++) { s=s+'<li>'+vec[f]+'</li>'; } fin(); return s;
Es decir primero se define la variable local s y se inicializa con un
string vacío. Seguidamente se llama a la función comienzo que tiene por
objetivo cargar en la variable s el valor '<ol>'.
Cuando finaliza de ejecutarse la función interna continua con el for definido en la función generarListaOrdenada:
for(f=0;f<vec.length;f++) { s=s+'<li>'+vec[f]+'</li>'; }
Finalmente cuando sale del for se llama a la segunda función anidada llamada fin:
fin();
Las funciones anidadas pueden acceder a las variables locales de la
función que las contiene (en este caso pueden acceder a la variable s)
Luego la función generarListaOrdenada completa queda con la sintaxis:
function generarListaOrdenada(vec) { function comienzo() { s='<ol>'; } function fin() { s=s+'</ol>'; } var s=''; comienzo(); var f; for(f=0;f<vec.length;f++) { s=s+'<li>'+vec[f]+'</li>'; } fin(); return s; }
A la función generarListaOrdenada la llamamos desde la función
anónima que definimos para el evento onload de la página. Cargamos en el
elemento div definido dentro de la página el código HTML que genera una
lista ordenada:
onload=function() { var opciones=['Opción a','Opción b','Opción c','Opción d']; document.getElementById('div1').innerHTML=generarListaOrdenada(opciones); }
Las funciones anidadas no se las puede llamar desde fuera de la
función que las contiene, por ejemplo produce un error si intentamos
llamar a la función "comienzo" desde fuera de la función
generarListaOrdenada:
onload=function() { var opciones=['Opción a','Opción b','Opción c','Opción d']; comienzo(); document.getElementById('div1').innerHTML=generarListaOrdenada(opciones); }
No hay comentarios.:
Publicar un comentario