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 matriz de argumentos, en la función b se pierden. ¿Hay alguna forma de pasar argumentos a otra función de JavaScript como intento hacer?
javascript
Anders Nygaard
fuente
fuente
arguments
no es una matriz (sino más bien un objeto que implementa una semántica similar a una matriz ) y, por lo tanto, a primera vista no está del todo claro si se puede usar de la misma manera que una matriz real.Respuestas:
Use
.apply()
para tener el mismo acceso a laarguments
función inb
, así:Puedes probarlo aquí .
fuente
var copy = [].slice.call(arguments); <remove what you want> myFunc.apply(this, copy);
apply
esta manera podría arruinar el alcance deb
(si es alguna función interna de un objeto, por ejemplo)Operador extendido
ECMAScript ES6 agregó un nuevo operador que le permite hacer esto de una manera más práctica: ... Operador extendido .
Ejemplo sin usar el
apply
método:Note Este fragmento devuelve un error de sintaxis si su navegador todavía usa ES5.
Nota del editor: Desde los usos de fragmento
console.log()
, debe abrir la consola JS de su navegador para ver el resultado - no habrá ninguna consecuencia en la página.Mostrará este resultado:
En resumen, el operador de propagación se puede usar para diferentes propósitos si está usando 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
fuente
...args
en laa
función. Simplemente puede hacer una función sin argumentos y pasarlos ab
con...arguments
...args
comoa
entrada puede ser importante si tiene funciones anidadas.La explicación de 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
arguments
objeto.los
arguments
objeto contiene un elemento para cada parámetro real proporcionado a la función. Cuando se llama aa
usted suministra tres argumentos: los números1
,2
y,3
. Entonces,arguments
contiene[1, 2, 3]
.Cuando llama
b
, sin embargo, pasa exactamente un argumento:a
elarguments
objeto de. Por lo tanto,arguments
contiene[[1, 2, 3]]
(es decir, un elemento, que esa
elarguments
objeto, que tiene propiedades que contienen los argumentos originales paraa
).Como demostró @Nick, puede usar
apply
para proporcionar unarguments
objeto establecido en la llamada.Lo siguiente logra el mismo resultado:
Pero
apply
es la solución correcta en el caso general.fuente
this
aapply
?prueba esto
fuente