2011-11-29 21 views

Respuesta

24

No es la colección arguments, que contiene todos los argumentos que se pasan a la función.

a) no es necesario especificar argumentos "opcionales" en la firma de la función yb) cualquier función acepta cualquier cantidad de parámetros.

function foo() { 
    console.log(arguments); 
} 

foo(1,2,3,4); // logs [1, 2, 3, 4] 

Del mismo modo, no hay necesidad de suministrar argumentos "necesarios" en una llamada de función:

function foo(a, b, c, d) { 
    console.log(arguments); 
} 

foo(1,2); // logs [1, 2] 

Cualquier argumento con nombre en la firma pero no se incluye en la llamada a la función será undefined.

Tenga en cuenta que arguments se comporta como una matriz, pero técnicamente no es una. Por ejemplo, puede llamar al arguments[0], pero no puede llamar al arguments.slice(). Lo que puede hacer para evitar esto es usar el prototipo de Array:

Array.prototype.slice.call(arguments, 1, 2); 
2

JavaScript tiene arguments objeto dentro de funciones. Contiene todos los parámetros pasados ​​a la función.

More info

2

Sí. arguments.

function concatStrings() { 
    var str = ''; 
    for (var i = 0; i < arguments.length; i++) { 
     str += arguments[i]; 
    } 
    return str; 
} 

Tenga en cuenta que arguments no es una matriz, por lo que no tiene métodos como join o push. Es solo un objeto similar a una matriz (con propiedades numéricas y una propiedad length) por lo que puede repetirse.

1

Es algo implícito en la variable especial "argumentos". Utilice la siguiente manera:

function something(arg1, arg2) { 
    for (var i = 0; i < arguments.length; i++) { 
     var x = arguments[i]; 
    } 
} 

Entonces se le puede llamar como something(1, 2, 3, 'a', 'b', 'c')

Más ejemplos aquí: http://www.jtricks.com/javascript_tutorials/varargs.html

0

funciones Javascript pueden aceptar cualquier número de parámetros por defecto. Puede verlos con la variable arguments.

Ver here.

+1

Son 'arguments', y no es una palabra clave. – pimvdb

+0

Vaya, mi mal, eso es lo que sucede cuando haces tres cosas a la vez. Editado – Kraylog

6

Sé que este hilo es muy viejo, pero creo que falta algo aquí.

Hay Rest parameter (introducido en ECMAScript 6) que nos permitirá para representar un indefinida número de argumentos como un array.

Siempre devuelve una matriz.Lo que significa que incluso en un terreno defensivo de JavaScript, está bien hacer cosas como comprobar .length de descanso sin guardias.

Sintaxis:

function(a, b, ...theArgs) { 
// ... 
} 

Hay tres diferencias principales entre los parámetros de descanso y los argumentos del objeto:

  1. parámetros de descanso son sólo los que no se les ha dado un nombre distinto , mientras que el objeto arguments contiene todos los argumentos pasados ​​a la función
  2. el objeto argumentos no es una matriz real, mientras que los parámetros de resto son instancias de matriz ces, lo que significa que métodos como sort, map, forEach o pop se pueden aplicar directamente;
  3. el objeto arguments tiene una funcionalidad adicional específica para sí misma (como la propiedad callee).

lectura adicional: Spread

function f(x, ...y) { 
 
    // y is an Array 
 
    return x * y.length; 
 
} 
 

 
console.log("Expected result : 3*2 = 6 & Actual result : " + f(3, "hello", true)); 
 
console.log("Expected result : 3*4 = 12 & Actual result : " + f(3, "a", true, "b", 1)); 
 

 
//here we are not passing anything to "y" but its still safe to check .length of "y" because it always return an array. 
 
console.log("Expected result : 3*0 = 0 & Actual result : " + f(3));

+0

Creo que esta debería ser la respuesta esperada porque es el verdadero paralelo a params (aunque no todos podemos usar ES6) – shirbr510

Cuestiones relacionadas