retornar - ¿Qué pasa si no paso un parámetro en una función de Javascript?
paso de parametros js (7)
Así es como funciona JavaScript. Los parámetros son opcionales y tendrán el valor no realmente un valor "indefinido" en la función si faltan en una llamada de función.
Por "opcional" me refiero a eso: invocar cualquier función implica una lista de parámetros arbitrariamente larga. No es necesario que exista una relación entre el número de parámetros pasados a una función y el número declarado . Mejor manera de pensar en esta declaración, entonces:
function x(a, b, c) {
// ...
}
es que está declarando una función y vinculando el nombre "a" al primer parámetro, "b" al segundo, y "c" al tercero. Sin embargo, no está garantizado de ninguna manera que cualquiera de ellos se vincule a un valor en cualquier invocación de la función más adelante.
De la misma manera, puede definir una función sin ningún parámetro, y luego "encontrarla" a través del objeto de arguments
:
function noArgs() {
var a = arguments[0], b = arguments[1], c = arguments[2];
// ...
}
Así que no es exactamente lo mismo que la primera función, pero está cerca en la mayoría de las formas que cuentan prácticamente.
El valor "indefinido" en JavaScript es un valor, pero su semántica es algo inusual a medida que avanzan los idiomas. En particular, no es exactamente el mismo que el valor null
. Además, "indefinido" en sí mismo no es una palabra clave; ¡Es solo un nombre de variable semi-especial!
Soy nuevo en el mundo de Javascript y estoy jugando con la escritura de funciones muy básicas y tropecé con el siguiente ejemplo por accidente y no estoy seguro de por qué funciona cuando no estoy pasando un parámetro cuando la función lo exige.
Función de muestra
function myfunction(x) {
alert("This is a sample alert");
}
Ahora si llamo la función myfunction();
función myfunction();
Me presentan la alerta. ¿Por qué es que puedo llamar a la función sin ningún error o advertencia cuando no he pasado un parámetro?
EDITAR
No esperaba tantas respuestas geniales y de ninguna manera estoy en una posición para poder decir cuál es la mejor, así que puedo pedirle a la gente que sugiera la mejor respuesta y otorgaré la aceptación a esa persona.
JavaScript no tiene valores predeterminados para los parámetros de función como lo hacen otros idiomas. Por lo tanto, puede pasar tantos o tan pocos argumentos como desee.
Si no pasa un valor, el parámetro undefined
está undefined
.
function myfunction(x) {
alert(x);
}
myfunction(); // alerts undefined
myfunction(1); // alerts 1
myfunction(1,2,3); // alerts 1
Si pasa más parámetros de los que están en la firma, puede usar arguments
.
function myfunction(x) {
alert(x);
console.log(arguments);
}
myfunction(1,2,3); // alerts 1, logs [1,2,3]
No pasará nada, lo que significa que no recibirá un error o una advertencia, ya que pasar los parámetros en javascript es opcional.
Todos los parámetros que no fueron "suministrados" tendrán el valor undefined
.
function foo(x, y, z){
//...
}
foo(1);
Dentro de la función foo
ahora:
function foo(x, y, z){
x === 1
y === undefined
z === undefined
}
Incluso puedes pasar más argumentos, como:
foo(1,2,3,4,5,7); // Valid!
Puede conocer las cantidades de parámetros proporcionados por los arguments.length
desde dentro de la función.
function foo(x, y, z) {
console.log(''x value: '' + x);
console.log(''y value: '' + y);
console.log(''z value: '' + z);
console.log(''Arguments length: '' + arguments.length);
}
console.log(''Zero parameters'');
foo();
console.log(''Four parameters'');
foo(1, 2, 3, 4);
Ejemplo de función útil que maneja cualquier cantidad de parámetros:
function max() {
var maxValue = arguments[0];
for (var i = 1; i < arguments.length; i++) {
if (maxValue < arguments[i]) {
maxValue = arguments[i];
}
}
return maxValue;
}
alert(max(1, 5, 7, 2, 88, 32, 44));
Porque no hay error hasta que la función espera poder trabajar con el parámetro que se supone que debe pasar.
Por ejemplo:
function myfunction(x) {
return x*2;
}
Tiraría un error; aunque probablemente solo un NaN
(en este caso) o una variable is undefined
.
Si omite el argumento, su valor será undefined
. Esto le permite crear parámetros opcionales con bastante facilidad.
Otra característica es la capacidad de definir una función sin parámetros y llamarla con argumentos con éxito, haciendo uso del objeto de arguments
. Esto le permite crear fácilmente matrices de argumentos de longitud variable.
También puede proporcionar más argumentos que solo el mencionado en la función
myFunction(1,2,3,4,5,6,7,''etc'');
Puede usar la propiedad arguments
que es una matriz para ver los argumentos proporcionados.
Todos los argumentos en las funciones de JavaScript son opcionales (lea "Escrito sin apretar").
Las funciones de JavaScript se pueden invocar con cualquier número de argumentos, independientemente de la cantidad de argumentos nombrados en la definición de la función. Debido a que una función se escribe de forma flexible, no hay forma de que declare el tipo de argumentos que espera, y es legal pasar valores de cualquier tipo a cualquier función. Cuando se invoca una función con menos argumentos que los declarados, los argumentos adicionales tienen el valor indefinido.
Puede referirse a los argumentos de una función dentro de la función utilizando las variables de argumento nombradas o el objeto de argumentos. Este objeto contiene una entrada para cada argumento que se pasa a la función; el índice de la primera entrada comienza en 0. Por ejemplo, si a una función se le pasan tres argumentos, puede referirse al argumento de la siguiente manera:
arguments[0]
arguments[1]
arguments[2]
- JavaScript - La Guía Definitiva, 5ª Edición