Loading…
En unos segundos, estará listo.
- Teoría
- Teoría
Orden de los argumentos
En el ejercicio anterior encontramos un valor extraño: NaN. Significa «not a number» («no es un número») e indica que no se puede obtener el resultado numérico de una operación. Veamos de dónde salió NaN. Si una función tiene un parámetro, pero no le pasamos un argumento, ese parámetro tendrá el valor undefined, es decir, «no definido», dentro de la función. Las operaciones aritméticas con undefined dan NaN.
La función calculateMiles esperaba recibir un número y, mientras no se lo pasamos al llamarla, no pudo trabajar correctamente:
let calculateMiles = function (distance) {
…
// Si no se pasa el argumento, la variable contendrá NaN
let miles = distance * percent;
…
}Hay otro detalle sobre los argumentos: hay que pasarlos en el mismo orden en que se declararon los parámetros de la función.
Dejemos por un momento el cálculo de millas y hablemos de gustos literarios. Tenemos una función getFavoriteBook que muestra en la consola un mensaje sobre el libro favorito de una persona. Tiene dos parámetros: el primero se llama userName (nombre de usuario) y el segundo, bookName (título del libro).
let getFavoriteBook = function (userName, bookName) {
console.log('Me llamo ' + userName + '. Mi libro favorito es: ' + bookName);
}Supongamos que nuestro usuario se llama Semión y su libro favorito es «El erizo en la niebla». Pasemos estos argumentos a la función: primero el título del libro y después el nombre del usuario.
let getFavoriteBook = function (userName, bookName) {
// El parámetro userName contiene 'El erizo en la niebla'
// El parámetro bookName contiene 'Semión'
…
}
// Llamamos a la función
getFavoriteBook('El erizo en la niebla', 'Semión');
// Mostrará: Me llamo El erizo en la niebla. Mi libro favorito es: SemiónAlgo salió mal. ¿Por qué obtuvimos ese resultado? Pasamos el nombre del usuario y el título del libro, tal como correspondía.
Todo depende del orden de los valores que pasamos. Los parámetros funcionan como variables: el valor del argumento se guarda en el parámetro y luego se usa dentro de la función por su nombre. Eso fue exactamente lo que ocurrió. El primer parámetro es userName y el primer argumento es 'El erizo en la niebla'. Por eso ese argumento se guardó en userName, mientras que 'Semión' pasó a bookName. Tú sabes cuál es el nombre y cuál es el título del libro, pero JavaScript no. Lo interpreta todo literalmente: lo primero que pasamos va al primer parámetro. El orden de los argumentos corresponde al orden de los parámetros de la función. Nuestros parámetros están en este orden: userName, bookName. Por eso debemos pasar primero el nombre del usuario y después el título del libro.
let getFavoriteBook = function (userName, bookName) {
// El parámetro userName contiene 'Semión'
// El parámetro bookName contiene 'El erizo en la niebla'
…
}
// Llamamos a la función
getFavoriteBook('Semión', 'El erizo en la niebla');
// Mostrará: Me llamo Semión. Mi libro favorito es: El erizo en la nieblaAhora pasamos los argumentos en el orden correcto y el mensaje tiene sentido.
Practiquemos llamando a una función con argumentos en distintos órdenes.
En el ejemplo usamos cadenas, pero con los números la situación puede ser aún más curiosa. Si pasamos valores de distintos tipos, por ejemplo números y cadenas, en un orden incorrecto, podemos obtener resultados inesperados. Puede haber una concatenación: el número se une a la cadena y el resultado es otra cadena. O podemos obtener el valor NaN.
- script.js
El código ha cambiado, haga clic en "Ejecutar" o active la ejecución automática.