L'explication qu'aucune des autres réponses ne fournit est que les arguments d'origine sont toujours disponibles, mais pas dans la position d'origine dans l' argumentsobjet.
L' argumentsobjet contient un élément pour chaque paramètre réel fourni à la fonction. Lorsque vous appelez avous fournir trois arguments: les chiffres 1, 2et, 3. Donc, argumentscontient [1, 2, 3].
function a(args){
console.log(arguments) // [1, 2, 3]
b(arguments);
}
bCependant, lorsque vous appelez , vous passez exactement un argument: al' argumentsobjet de. argumentsContient donc [[1, 2, 3]](c'est-à-dire un élément, qui est al' argumentsobjet, qui a des propriétés contenant les arguments d'origine a).
function b(args){
// arguments are lost?
console.log(arguments) // [[1, 2, 3]]
}
a(1,2,3);
Comme l'a démontré @Nick, vous pouvez utiliser applypour fournir un argumentsobjet défini dans l'appel.
Ce qui suit obtient le même résultat:
function a(args){
b(arguments[0], arguments[1], arguments[2]); // three arguments
}
Mais applyc'est la bonne solution dans le cas général.
argumentsne s'agit pas réellement d' un tableau (mais plutôt d'un objet qui implémente une sémantique de type tableau ) et qu'il n'est donc pas tout à fait clair à première vue s'il peut être utilisé de la même manière qu'un tableau réel.