Function.prototype.arguments
Obsoleto: Esta característica ya no se recomienda. Aunque es posible que algunos navegadores aún lo admitan, probablemente ya se ha eliminado de los estándares web relevantes, está en proceso de eliminación o solo se conserva por motivos de compatibilidad. Evite usarlo y actualice el código existente si es posible; consulte la tabla de compatibilidad en la parte inferior de esta página para orientar su decisión. Tenga en cuenta que esta característica puede dejar de funcionar en cualquier momento.
No estándar: Esta característica no es parte de los estándares. No la uses en sitios Web en producción: no funcionará para todos los usuarios. Podrían haber también incompatibilidades considerables entre distintas implementaciones y el comportamiento podría cambiar en el futuro.
Nota: La propiedad arguments
de los objetos Function
está en desuso. La forma recomendada de acceder al objeto arguments
es hacer referencia a la variable arguments
disponible dentro de las funciones.
La propiedad de acceso arguments
de instancias de Function
devuelve los argumentos pasados a esta función. Para las funciones strict, flecha , asíncronas y generadoras, acceder a la propiedad arguments
arroja un TypeError
.
Descripción
El valor de arguments
es un objeto similar a un arreglo correspondiente a los argumentos pasados a una función.
En el caso de recursividad, es decir, si la función f
aparece varias veces en la pila de llamadas, el valor de f.arguments
representa los argumentos correspondientes a la invocación más reciente de la función.
El valor de la propiedad arguments
normalmente es null
si no hay una invocación pendiente de la función en progreso (es decir, la función ha sido llamada pero aún no ha devuelto).
Tenga en cuenta que el único comportamiento especificado por la especificación ECMAScript es que Function.prototype
tiene un descriptor de acceso inicial arguments
que arroja incondicionalmente un TypeError
para cualquier solicitud get
o set
(conocida como "poison pill accessor" -accesor de píldora envenenada-), y que las implementaciones no pueden cambiar esta semántica para ninguna función, excepto funciones simples no estrictas. El comportamiento real de la propiedad arguments
, si es algo más que arrojar un error, es definido en la implementación Por ejemplo, Chrome lo define como una propiedad de datos propia, mientras que Firefox y Safari extienden el descriptor de acceso inicial Function.prototype.arguments
de la píldora venenosa para manejar especialmente los valores this
que son funciones no estrictas.
(function f() {
if (Object.hasOwn(f, "arguments")) {
console.log(
"arguments es una propiedad propia con descriptor",
Object.getOwnPropertyDescriptor(f, "arguments"),
);
} else {
console.log(
"f no tiene una propiedad propia llamada argumentos. Tratando de obtener f.[[Prototype]].arguments",
);
console.log(
Object.getOwnPropertyDescriptor(
Object.getPrototypeOf(f),
"arguments",
).get.call(f),
);
}
})();
// En Chrome:
// arguments es una propiedad propia con descriptor {value: Arguments(0), writable: false, enumerable: false, configurable: false}
// En Firefox:
// f no tiene una propiedad propia llamada argumentos. Tratando de obtener f.[[Prototype]].arguments
// Arguments { … }
Ejemplos
Usando la propiedad arguments
function f(n) {
g(n - 1);
}
function g(n) {
console.log(`antes: ${g.arguments[0]}`);
if (n > 0) {
f(n);
}
console.log(`después: ${g.arguments[0]}`);
}
f(2);
console.log(`devuelto: ${g.arguments}`);
// Logs:
// antes: 1
// antes: 0
// después: 0
// después: 1
// devuelto: null
Especificaciones
Not part of any standard.
Compatibilidad con navegadores
BCD tables only load in the browser