L'explication qu'aucune des autres réponses ne fournit est que les arguments originaux sont toujours disponibles, mais pas dans leur position initiale dans le système de gestion de l'information. arguments
objet.
El arguments
contient un élément pour chaque paramètre réel fourni à la fonction. Lorsque vous appelez a
vous fournissez trois arguments : les nombres 1
, 2
et, 3
. Donc, arguments
contient [1, 2, 3]
.
function a(args){
console.log(arguments) // [1, 2, 3]
b(arguments);
}
Lorsque vous appelez b
cependant, vous passez exactement un argument : a
's arguments
objet. Ainsi, arguments
contient [[1, 2, 3]]
(c'est-à-dire un élément, qui est a
's arguments
qui possède des propriétés contenant les arguments originaux de l'objet a
).
function b(args){
// arguments are lost?
console.log(arguments) // [[1, 2, 3]]
}
a(1,2,3);
Comme @Nick l'a démontré, vous pouvez utiliser apply
pour fournir un ensemble arguments
dans l'appel.
La méthode suivante permet d'obtenir le même résultat :
function a(args){
b(arguments[0], arguments[1], arguments[2]); // three arguments
}
Mais apply
est la solution correcte dans le cas général.
3 votes
@BobStein-VisiBone D'accord. De plus, notez que
arguments
n'est pas en fait un tableau (mais plutôt un objet qui implémente une sémantique de type tableau ) et il n'est donc pas évident, à première vue, de savoir s'il peut être utilisé de la même manière qu'un tableau réel.0 votes
@Jules encore vote pour la réouverture après toutes ces années. Quel est le badge pour avoir brûlé le précieux travail d'autres personnes ? Il y en a beaucoup pour tout le monde.