J'ai essayé ce qui suit sans succès:
function a(args){
b(arguments);
}
function b(args){
// arguments are lost?
}
a(1,2,3);
Dans la fonction a, je peux utiliser le mot-clé arguments pour accéder à un tableau d'arguments, dans la fonction b ceux-ci sont perdus. Existe-t-il un moyen de passer des arguments à une autre fonction javascript comme j'essaie de le faire?
javascript
Anders Nygaard
la source
la source
arguments
ne 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.Réponses:
Utilisez
.apply()
pour avoir le même accès àarguments
en fonctionb
, comme ceci:Vous pouvez le tester ici .
la source
var copy = [].slice.call(arguments); <remove what you want> myFunc.apply(this, copy);
apply
comme ça pourrait bousiller la portée deb
(si c'est une fonction interne d'un objet par exemple)Opérateur de diffusion
ECMAScript ES6 a ajouté un nouvel opérateur qui vous permet de le faire de manière plus pratique: ... Spread Operator .
Exemple sans utiliser la
apply
méthode:Note Cet extrait renvoie une erreur de syntaxe si votre navigateur utilise toujours ES5.
Note de l'éditeur: Étant donné que l'extrait de code utilise
console.log()
, vous devez ouvrir la console JS de votre navigateur pour voir le résultat - il n'y aura aucun résultat sur la page.Il affichera ce résultat:
En bref, l'opérateur de propagation peut être utilisé à des fins différentes si vous utilisez des tableaux, il peut donc également être utilisé pour des arguments de fonction, vous pouvez voir un exemple similaire expliqué dans les documents officiels: Paramètres de repos
la source
...args
de laa
fonction. Vous pouvez simplement créer une fonction sans arguments et les transmettre àb
with...arguments
...args
asa
peut être important si vous avez des fonctions imbriquées.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'
arguments
objet.L'
arguments
objet contient un élément pour chaque paramètre réel fourni à la fonction. Lorsque vous appeleza
vous fournir trois arguments: les chiffres1
,2
et,3
. Donc,arguments
contient[1, 2, 3]
.b
Cependant, lorsque vous appelez , vous passez exactement un argument:a
l'arguments
objet de.arguments
Contient donc[[1, 2, 3]]
(c'est-à-dire un élément, qui esta
l'arguments
objet, qui a des propriétés contenant les arguments d'originea
).Comme l'a démontré @Nick, vous pouvez utiliser
apply
pour fournir unarguments
objet défini dans l'appel.Ce qui suit obtient le même résultat:
Mais
apply
c'est la bonne solution dans le cas général.la source
this
àapply
?essaye ça
la source