90 votes

Pointeurs en JavaScript ?

Peut-on passer une référence d'une variable immuable comme argument dans une fonction ?

Exemple :

var x = 0;
function a(x)
{
    x++;
}
a(x);
alert(x); //Here I want to have 1 instead of 0

8voto

AlexisK Points 111

Vous faites référence à « x » à partir de l'objet fenêtre

var x = 0;

function a(key, ref) {
    ref = ref || window;  // object reference - default window
    ref[key]++;
}

a('x');                   // string
alert(x);

4voto

Himanshu Points 380

Réponse tardive mais je suis tombé sur une façon de passer des valeurs primitives par référence au moyen de fermetures. C'est assez compliqué de créer un pointeur, mais ça marche.

function ptr(get, set) {
    return { get: get, set: set };
}

function helloWorld(namePtr) {
    console.log(namePtr.get());
    namePtr.set('jack');
    console.log(namePtr.get())
}

var myName = 'joe';
var myNamePtr = ptr(
    function () { return myName; },
    function (value) { myName = value; }
);

helloWorld(myNamePtr); // joe, jack
console.log(myName); // jack

Dans ES6, le code peut être raccourci pour utiliser des expressions lambda :

var myName = 'joe';
var myNamePtr = ptr(=> myName, v => myName = v);

helloWorld(myNamePtr); // joe, jack
console.log(myName); // jack

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X