una tipos pasar parametros llamada función funciones funcion foo desde cual argumentos anidadas javascript arrays arguments

javascript - tipos - Función de llamada con matriz de argumentos



pasar parametros a una funcion javascript desde html (2)

Esta pregunta ya tiene una respuesta aquí:

¿Puedo llamar a una función con una variedad de argumentos de una manera conveniente en JavaScript?

Ejemplo:

var fn = function() { console.log(arguments); } var args = [1,2,3]; fn(args);

Necesito que los arguments sean [1,2,3] , al igual que mi matriz.


Debes utilizar apply :

var fn = function() { console.log(arguments); }; var args = [1,2,3]; fn.apply(null, args);

Aplicar hará la llamada de función equivalente:

fn(1,2,3);

Tenga en cuenta que usé null como el primer argumento de apply , que establecerá this palabra clave en el objeto global ( window ) dentro de fn .

Además, debe saber que el objeto de arguments no es realmente una matriz, es un objeto de tipo matriz, que contiene índices numéricos correspondientes a los argumentos que se utilizaron para llamar a su función, una propiedad de length que le proporciona el número de argumentos utilizados, y la propiedad arguments.callee que es una referencia a la función de ejecución (útil para la recursión en funciones anónimas).

Si desea crear una matriz a partir de su objeto de arguments , puede usar el método Array.prototype.slice :

var fn = function() { var args = Array.prototype.slice.call(arguments); console.log(args); };

Edición: en respuesta a su comentario, sí, podría usar el método de shift y establecer su valor devuelto como el contexto (la palabra clave) en su función:

fn.apply(args.shift(), args);

Pero recuerde que shift eliminará el primer elemento de la matriz original, y se llamará a su función sin ese primer argumento.

Si aún necesita llamar a su función con todos sus otros argumentos, puede:

fn.apply(args[0], args);

Y si no desea cambiar el contexto, simplemente puede extraer el primer argumento dentro de su función:

var fn = function() { var args = Array.prototype.slice.call(arguments), firstArg = args.shift(); console.log(args, firstArg); };