24. Funciones

Versión para imprimir.

En esta lección se presenta el concepto de función.

A. Función

Ejecución de las instrucciones de una función.

  • Una función no se ejecuta ella misma.

  • Se usa una instrucción llamada invocación de función, que consiste en el nombre de la función, seguida de paréntesis; por ejemplo, si una función se llama saluda, para hacer que se ejecute, hay que colocar la instrucción
    saluda()

  • Antes de que una función se ejecute, se suspende lo que se estaba haciendo y se marca el punto donde se invocó, posteriormente, se ejecuta la función y al terminar, se regresa al punto de invocación y se continúa con la siguiente instrucción.

  • En JavaScript, las variables declarades en el mismo espacio que la declaración de una función, se pueden usar dentro de la función.

Ejemplo

let nombre = "pp";
saluda() // invoca a saluda.
/* Al terminar invocación
 * continúa aquí. */
console.log("adios")

/**
 * Definición de la función
 * saluda.
 */
function saluda() {
 console.log(nombre)
}

Salida

pp
adios

B. Invocación más de una vez

let nombre = "pp";
saluda() // invoca a saluda.
/* Al terminar la primera
 * invocación continúa aquí. */
nombre = "qk"
saluda() // invoca a saluda.
/* Al terminar la segunda
 * invocación continúa aquí. */
console.log("adios")

/**
 * Definición de la función saluda.
 */
function saluda() {
 console.log(nombre)
}

Salida

pp
qk
adios

Depúralo en JavaScript Tutor.

C. Funciones que invocan funciones

function c1() {
 console.log("c1-1")
 c2()
 console.log("c1-2")
}
function c2() {
 console.log("c2")
}
console.log("global-1")
c2()
console.log("global-2")
c1()
console.log("global-3")

Salida

global-1
c2
global-2
c1-1
c2
c1-2
global-3

Depúralo en JavaScript Tutor.

D. Paso de parámetros

console.log("m1")
fn(3, -2)
/**
 * @param {number} a
 * @param {number} b
 */
function fn(a, b) {
 console.log(a + b)
}
console.log("3")

Salida

m1
1
3

Depúralo en JavaScript Tutor.

E. Funciones con expresiones en los parámetros

/**
 * @param {number} a
 * @param {number} b
 * @param {number} c
 */
function fn(a, b, c) {
 console.log(a + b * c)
}
const a = 3
fn(3 - 8, a, a * 2)
console.log("ggg")

Salida

13
ggg

Depúralo en JavaScript Tutor.

F. Funciones con valor de regreso

const x = fna(8, 5)
console.log(fna(4, 1))
console.log(x)
/**
 * @param {number} t
 * @param {number} bc
 */
function fna(t, bc) {
 console.log(t + bc * 2)
 return (1 + t * 8)
}

Salida

18
6
33
65

Depúralo en JavaScript Tutor.

G. Funciones flecha

const fx =
 () => console.log("hola")
const fy =
 (f) => console.log(f)
const fz = (a, b) => {
 console.log(a + b)
 return (a * b)
}
const fw = g => g + 1
fx()
console.log(fz(4, -15))
fy("mx")
console.log(fw(3))

Salida

hola
-11
-60
mx
4

Depúralo en JavaScript Tutor.

H. Recursividad

/**
 * @param {number} a
 * @param {number} b
 */
function fns(a, b) {
 if (a <= 0) {
  console.log("Devuelve", b)
  return (b)
 } else {
  console.
   log("Invoca:", a - 1, ", ", b)
  const ant = fns(a - 1, b)
  console.log("Devuelve:", ant + 1)
  return (ant + 1)
 }
}
console.log("Invoca: 2, 3")
console.log(fns(2, 3))

Salida

Invoca: 2, 3
Invoca: 1 ,  3
Invoca: 0 ,  3
Devuelve 3
Devuelve: 4
Devuelve: 5
5

Depúralo en JavaScript Tutor.

I. Resumen