una - Pasando argumentos a otra función javascript
pasar parametros javascript onclick (3)
Operador de propagación
El operador de difusión permite que una expresión se expanda en lugares donde se esperan múltiples argumentos (para llamadas a funciones) o múltiples elementos (para literales de matriz).
ECMAScript ES6 agregó un nuevo operador que le permite hacer esto de una manera más práctica: ... Operador de propagación .
Ejemplo sin usar el método de apply
:
function a(...args){
b(...args);
b(6, ...args, 8) // You can even add more elements
}
function b(){
console.log(arguments)
}
a(1, 2, 3)
Nota Este fragmento de código devuelve un error de sintaxis si su navegador aún usa ES5.
Nota del editor: como el fragmento de console.log()
usa console.log()
, debe abrir la consola JS de su navegador para ver el resultado , no habrá resultados en la página.
Se mostrará este resultado:
En resumen, el operador de propagación se puede usar para diferentes propósitos si está utilizando matrices, por lo que también se puede usar para argumentos de función, puede ver un ejemplo similar explicado en los documentos oficiales: Parámetros de descanso
Esta pregunta ya tiene una respuesta aquí:
He intentado lo siguiente sin éxito:
function a(args){
b(arguments);
}
function b(args){
// arguments are lost?
}
a(1,2,3);
En la función a, puedo usar la palabra clave argumentos para acceder a una serie de argumentos, en la función b estos se pierden. ¿Hay alguna forma de pasar argumentos a otra función javascript como intento hacerlo?
La explicación que ninguna de las otras respuestas proporciona es que los argumentos originales todavía están disponibles, pero no en la posición original en el objeto de arguments
.
El objeto de arguments
contiene un elemento para cada parámetro real proporcionado a la función. Cuando llamas a
, suministras tres argumentos: los números 1
, 2
y 3
. Entonces, los arguments
contienen [1, 2, 3]
.
function a(args){
console.log(arguments) // [1, 2, 3]
b(arguments);
}
Sin embargo, cuando llama a b
, pasa exactamente un argumento: el objeto de arguments
. Así que los arguments
contienen [[1, 2, 3]]
(es decir, un elemento, que es el objeto de arguments
, que tiene propiedades que contienen los argumentos originales a).
function b(args){
// arguments are lost?
console.log(arguments) // [[1, 2, 3]]
}
a(1,2,3);
Como demostró @Nick, puede usar apply
para proporcionar un objeto de arguments
establecidos en la llamada.
Lo siguiente logra el mismo resultado:
function a(args){
b(arguments[0], arguments[1], arguments[2]); // three arguments
}
Pero apply
es la solución correcta en el caso general.
Use .apply()
para tener el mismo acceso a los arguments
en la función b
, como esto:
function a(){
b.apply(null, arguments);
}
function b(){
alert(arguments); //arguments[0] = 1, etc
}
a(1,2,3);