Dans les concepts traditionnels, on pense que les fonctions JavaScript passent le passage de référence (également appelée le passage du pointeur), et certaines personnes croient que le passage de la valeur et le passage de la référence sont disponibles. Alors, que se passe-t-il avec le passage du paramètre JS? En fait, la démonstration suivante peut être utilisée en Java
Tout d'abord, obtenons un type de livraison de base plus simple:
fonction add (num) {num + = 10; retour num;} num = 10; alert (add (num)); aelrt (num); // sorput 20,10Pour les sorties 20 et 10 ici, selon l'explication officielle de JS, une action de copie est effectuée lorsque les paramètres de type de base sont passés, de sorte que le Num variable déclaré externe et le paramètre de fonction Num ont exactement la même valeur, mais ont des adresses de paramètre complètement différentes. Personne ne se connaît et le cadre de pile du paramètre de fonction apparaît lorsque l'appel de fonction renvoie. Par conséquent, la modification du paramètre de fonction num n'a aucun effet sur les variables externes d'origine.
Regardons un pass de type de référence d'objet plus complexe:
fonction setName (obj) {obj.name = "ted";} var obj = new object (); setName (obj); alert (obj.name); // output tedL'essence du code ci-dessus est: créer un objet d'objet, attribuer lui une référence à obj (en c, il s'agit directement d'une affectation d'une adresse mémoire), puis lors de la transmission des paramètres de fonction, j'ai fait la même chose que la méthode précédente, copié une trame de pile à l'OBJ du paramètre de fonction, et les deux ont la même valeur (elle peut être comprise comme l'adresse de l'objet), puis lors du changement de jeu, le nom Java), et une fois la modification terminée, le cadre de pile correspondant au paramètre de fonction Obj doit également être apparu.
Par conséquent, la sortie correspondante est la valeur de l'objet objet après avoir changé
Ensuite, certains amis peuvent demander, cela peut également être compris comme une passe de référence (Pointer Pass)? Non, à proprement parler, dans des langues similaires à Java, il n'y a pas de pointeurs. En Java, le processus ci-dessus est appelé un processus d'analyse de la référence symbolique à la référence directe. En C, un pointeur est un type avec une longueur fixe (2 octets dans la plupart des compilateurs C), mais dans des langues similaires Java, les références ont également leurs propres propriétés et méthodes, mais vous ne pouvez pas l'accès et le contrôler directement, c'est donc aussi un objet dans un sens. Ce mécanisme évite également considérablement les fuites de mémoire, et le terme est appelé mécanisme d'accès structuré à la mémoire.
Pour prouver le point ci-dessus, l'exemple ci-dessus est légèrement modifié:
fonction setName (obj) {obj.name = "ted"; obj = nouvel objet (); obj.name = "Mary";} var obj = new object (); setName (obj); alert (obj.name); // output tedLa seule différence entre cet exemple et l'exemple précédent est qu'un nouvel objet est attribué au paramètre de fonction OBJ, de sorte que le paramètre de fonction OBJ et le paramètre OBJ de référence d'origine ont des valeurs et des adresses de mémoire complètement différentes.
L'article ci-dessus raconte brièvement si le passage du paramètre de la fonction JavaScript est le passage de la valeur ou la référence est tout le contenu que j'ai partagé avec vous. J'espère que cela pourra vous donner une référence et j'espère que vous pourrez soutenir Wulin.com plus.