0% encontró este documento útil (0 votos)
20 vistas

JavaScript 08 - Funciones 2

Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
20 vistas

JavaScript 08 - Funciones 2

Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 31

08 – Funciones (parte 2)

Conceptos avanzados
Índice

 Respecto al ámbito
 Paso por valor y por referencia
 El objeto Function
 Array de argumentos
 Parámetros
 Valores de parámetros por defecto
 Número de parámetros variable
 Recursividad

 Ejercicios

ALBERT BASSONS 2
Introducción
• En estas transparencias hablaremos de
algunos conceptos más avanzados que
tienen que ver con las funciones.

• Están pensadas para el curso IFCD0210


(nivel 3).

• Cosas como la limitación de ámbitos, el


paso por valor o por referencia, el array
de argumentos, los valores por defecto o
el número de parámetros variable.

ALBERT BASSONS 3
Respecto al ámbito
• Como ya sabemos, las variables solamente existen dentro de
su ámbito. Existen dos motivos fundamentales por los que se
limita el alcance de las variables:

• Liberar memoria, puesto que casi ninguna variable se


necesita fuera de la función o porción de código para la que
fue declarada.

• Evitar errores derivados de coincidencias de nombres. En


un programa complejo existen muchas variables, por tanto es
posible que tengamos nombres repetidos.

ALBERT BASSONS 4
Respecto al ámbito
• El uso de variables globales solamente se debe realizar en
casos que lo requieran. El uso indiscriminado de variables
globales consume más memoria y provoca errores de
programación.

• Cuando se empieza a programar, se suele abusar de las


variables globales (para evitar pasar parámetros a las
funciones). Esto es una muy mala práctica, que además de
tener los problemas anteriormente descritos, hará que
nuestras funciones no sean reutilizables en absoluto.

ALBERT BASSONS 5
Respecto al ámbito
• Siempre hay que crear las variables lo más locales
posible. De hecho, por ese motivo la nueva versión de
ECMAScript (ES6) ya incluye el ámbito de bloque que no
tenía JavaScript (que es más localizado que el ámbito local).

• De esta forma ahorraremos memoria y mantendremos mejor


control sobre las variables en uso en nuestras aplicaciones.

ALBERT BASSONS 6
Respecto al ámbito

ALBERT BASSONS 7
Paso por valor o referencia

• Hemos visto que a las funciones les pasamos parámetros para


que puedan realizar sus operaciones.

• Dentro de una función, los parámetros se comportan como


variables locales.

• Como ya sabemos, en variables locales se puede leer y escribir.


De este modo podemos cambiar los valores de los parámetros
dentro de la función como si fueran variables normales.

ALBERT BASSONS 8
Paso por valor o referencia

• Ahora bien… si cambiamos el valor de un parámetro dentro de


una función, ¿cambiará el valor de la variable que usamos en la
llamada a función?.

ALBERT BASSONS 9
Paso por valor o referencia

• Y la respuesta es…

 Depende.
 ¿De qué depende?
 De según como se pase la variable todo depende.

ALBERT BASSONS 10
Paso por valor

• Si el paso del parámetro se hace


por valor, lo que se pasa es una
copia del valor original.

• Modificar el parámetro no implica


modificar la variable original.

ALBERT BASSONS 11
Paso por referencia

• Si el paso del parámetro se


hace por referencia, lo que se
pasa es una referencia a la
variable original.

• Modificar el parámetro sí implica


modificar la variable original.

ALBERT BASSONS 12
Paso por valor o referencia

• En algunos lenguajes (como C o PHP) se puede elegir (en


algunos casos) si queremos realizar paso por valor o por
referencia (operador &).

• En otros lenguajes (como Java o JavaScript) no se puede elegir.


Las variables de tipos básicos se pasan por valor y los
objetos por referencia.

ALBERT BASSONS 13
Paso por valor en JS
• En JS, cuando pasamos una variable de tipo básico (number,
boolean, string) a una función, si en ella modificamos su
valor, la variable original no cambia. Se ha realizado un paso
por valor.

101

Respuesta: 1

ALBERT BASSONS 14
Paso por referencia en JS
• En JS, cuando pasamos objetos (Object o array), modificar
ese objeto en la función implica modificar el objeto original. Se
realiza un paso por referencia, pasando la posición en
memoria donde se encuentra el objeto original.

Respuesta:
[101, 102, 103, 104]

ALBERT BASSONS 15
Paso por valor o referencia

• Aunque ahora no le veáis relevancia, realmente el hecho de


que se pasen los objetos por referencia es MUY IMPORTANTE.

• Esto implica que cuando pasamos un objeto a una función y lo


modificamos, el objeto real quedará modificado.

• Por ejemplo, si pasamos una imagen (object) a una función y


alteramos su altura, la imagen quedará modificada. Si, por el
contrario pasamos solamente la altura (number) y la
modificamos, la imagen no quedará modificada.

ALBERT BASSONS 16
Ejemplo

ALBERT BASSONS 17
El objeto Function
• A pesar de que aún no hemos visto objetos en JavaScript,
mencionaré que las funciones también pueden ser vistas como
objetos.

• Se pueden crear funciones no solamente con el operador


function, sino también con el operador new y la llamada al
constructor Function().

• Después de ver las transparencias de orientación a objeto, lo


comprenderemos todo mejor. De momento ahí tenéis algún
ejemplo curioso.

ALBERT BASSONS 18
Ejemplo

ALBERT BASSONS 19
Array de argumentos
• Sabemos que las funciones reciben parámetros o argumentos
para poder realizar su trabajo.

• Se puede acceder a los argumentos de la función mediante el


objeto arguments.

• Este objeto tiene forma parecida a un array, se pueden


acceder a los argumentos usando el operador [].

• Además dispone de tres propiedades: length (número de


argumentos), caller (función que realiza la llamada), callee
(función que ha sido llamada, la actual).

ALBERT BASSONS 20
Ejemplo

ALBERT BASSONS 21
Parámetros

• En las transparencias anteriores, vimos que


para poder llamar a una función, debemos
hacerlo indicando el mismo número de
parámetros y del mismo tipo que se
especifique en el prototipo de la función.

• Pues bien… esto NO es cierto en todos los


lenguajes, incluido JavaScript.

ALBERT BASSONS 22
Parámetros
• Por ejemplo, en JavaScript ocurre que:

• Si agregamos más parámetros de los que se indican en el


prototipo, los sobrantes serán omitidos.

• Como no hay que indicar tipos, los tipos pueden no


coincidir (más flexibilidad per dificulta la depuración).

• Podemos agregar menos parámetros de los que se indican.


Los no especificados tomarán como valor undefined,
a no ser que les demos valores por defecto.

ALBERT BASSONS 23
Ejemplo

ALBERT BASSONS 24
Valores por defecto
• Acabamos de ver que si no indicamos el valor para un
parámetro, éste tomará como valor por defecto undefined.

• En JavaScript (como en PHP), podemos asignar valores por


defecto como se muestra en el ejemplo:

ALBERT BASSONS 25
Valores por defecto
• Además, a diferencia de PHP (versión 5), podemos indicar
valores por defecto para los primeros parámetros y no para los
últimos (cuidado que el orden no se puede alterar). Los que no
tengan valor por defecto serán undefined.

ALBERT BASSONS 26
Número de parámetros variable
• Y aún hay más… se permite el número de parámetros
variable, es decir que podemos tomar todos los parámetros que
nos pasen aún sin estar indicados en el prototipo de la función.

ALBERT BASSONS 27
Recursividad
• Sabemos que una función puede llamar a otra función pero...
¿puede llamarse a sí misma?.

• La respuesta es SÍ y además dicho mecanismo se conoce como


recursividad. Una función que se llama a sí misma es una
función recursiva.

• Las funciones recursivas deben tener un punto de salida, para


evitar entrar en bucles infinitos. En la siguiente transparencia se
muestra el ejemplo más habitual del mundo: el cálculo del
factorial de un número.

ALBERT BASSONS 28
Ejemplo

ALBERT BASSONS 29
Recursividad
• La recursividad puede ser múltiple o simple.

• Recursividad simple o directa: una función se llama a sí


misma.

• Recursividad mutua o indirecta: dos o más funciones se


llaman entre sí de forma recursiva.

• Hay más tipos de recursividad, pero no profundizaremos más


en este ámbito. Para más información podéis consultar
recursos sobre la elaboración de algoritmos recursivos.

ALBERT BASSONS 30
Ejemplo

ALBERT BASSONS 31

También podría gustarte