Il n'y a pas de "pass by reference" en JavaScript. Vous pouvez passer un objet (c'est-à-dire une référence à un objet) et demander à une fonction de modifier le contenu de l'objet :
function alterObject(obj) {
obj.foo = "goodbye";
}
var myObj = { foo: "hello world" };
alterObject(myObj);
alert(myObj.foo); // "goodbye" instead of "hello world"
Vous pouvez itérer sur les propriétés d'un tableau avec un index numérique et modifier chaque cellule du tableau, si vous le souhaitez.
var arr = [1, 2, 3];
for (var i = 0; i < arr.length; i++) {
arr[i] = arr[i] + 1;
}
Il est important de noter que le terme "pass-by-reference" est très spécifique. Il ne signifie pas simplement qu'il est possible de passer une référence à un objet modifiable. Cela signifie plutôt qu'il est possible de passer une simple variable de manière à permettre à une fonction de modifier cette valeur dans l'élément appel contexte. C'est ainsi que.. :
function swap(a, b) {
var tmp = a;
a = b;
b = tmp; //assign tmp to b
}
var x = 1, y = 2;
swap(x, y);
alert("x is " + x + ", y is " + y); // "x is 1, y is 2"
Dans un langage comme le C++, il est possible de le faire parce que ce langage fait ont (en quelque sorte) la possibilité de passer par référence.
éditer - Cette affaire a récemment (mars 2015) explosé sur Reddit à propos d'un article de blog similaire au mien mentionné ci-dessous, bien que dans ce cas à propos de Java. Il m'est apparu, en lisant les allers-retours dans les commentaires de Reddit, qu'une grande partie de la confusion provient de la collision malheureuse impliquant le mot "référence". La terminologie "pass by reference" et "pass by value" est antérieure au concept d'"objets" dans les langages de programmation. Il ne s'agit pas du tout d'objets, mais de paramètres de fonctions, et plus précisément de la manière dont les paramètres de fonctions sont "connectés" (ou non) à l'environnement d'appel. En particulier, il convient de noter que dans un véritable langage de passage par référence - un langage qui fait impliquer des objets - on aurait toujours la possibilité de modifier l'objet contenu et cela ressemblerait à peu près à ce qui se passe en JavaScript. Cependant, on pourrait également de modifier la référence de l'objet dans l'environnement de l'appelant, et c'est la chose essentielle que vous devez faire. ne peut en JavaScript. Un langage "pass-by-reference" ne transmettrait pas la référence elle-même, mais un référence à la référence .
éditer - Voici un billet de blog sur le sujet. (Notez le commentaire à cet article qui explique que le C++ n'a pas vraiment de pass-by-reference. C'est vrai. Ce que le C++ a, cependant, c'est la possibilité de créer des références à des variables simples, soit explicitement au moment de l'invocation d'une fonction pour créer un pointeur, soit implicitement lors de l'appel de fonctions dont la signature du type d'argument le prévoit. Ce sont les principales choses que JavaScript ne prend pas en charge).
36 votes
Vous parlez de "passage par référence", mais vous n'avez pas d'appel de fonction dans votre exemple, donc il n'y a pas de passage du tout dans votre exemple. Veuillez préciser ce que vous essayez de faire.
1 votes
Désolé pour la confusion. Je n'avais pas spécifiquement besoin d'écrire une fonction, donc "passer par référence" était un mauvais choix de mots. Je veux juste pouvoir effectuer certaines opérations sur des variables sans avoir à écrire
makePretty(var1); makePretty(var2); makePretty(var3); ...
1 votes
Sur la base de votre commentaire :
arr = [var1, var2, var3]; for (var i = 0, len = arr.length; i < len; i++) { arr[i] = makePretty(arr[i]); }
-- il suffit de stocker la valeur retournée parmakePretty
dans l'emplacement prévu à cet effet dans le tableau.1 votes
Pour ceux qui viennent de Google et qui cherchent "pass-by-reference" ou "pass-by-value" en Javascript, voici un bon article de Medium : medium.com/@TK_CodeBear/