IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Passage d'argument à une fonction


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 120
    Par défaut Passage d'argument à une fonction
    Je voudrais savoir s'il est possible de passer par reference un argument en javascript . si oui comment procède t-on? Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 125
    Par défaut
    Si je ne me trompe pas, les arguments en javascript sont tous passés en référence, hormis les types primitifs.
    A confirmer.

  3. #3
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Vrai. Les types primitifs en JS sont les nombres et les booléens. Tout le reste est objet donc passé par référence, ce qui inclut les chaînes, les tableaux, les fonctions, etc.

    Exemple avec un objet littéral :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var obj = {};
     
    function ajouterProp(o) {
      o.prop = "bonjour";
    }
     
    ajouterProp(obj); // obj est automatiquement passé par référence
     
    console.log(o.prop); // affiche "bonjour" dans la console
    Certains sont tentés de déclarer toutes leurs variables avec new, y compris celles de type primitif, par exemple new Number(42). C'est une mauvaise idée, car en faisant ça on crée en fait un objet et les avantages du type primitif sont perdus.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Membre chevronné
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Par défaut
    Les arguments d'une fonction en Javascript sont tous sans exception, c'est à dire quel que soit leur type objet ou pas, passés par valeur et non par référence.

    La spécificité d'un passage par référence est que dans l'appelant, l'argument passé peut revenir modifié. On ne parle pas de son contenu, mais de l'argument lui même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Soit une fonction qui échange ses arguments :
    function swap ( a, b ) {
        var t = a;
        a = b;
        b = t;
    }
    var a = 1, b = "deux";
    swap(a,b);
    // Si a et b étaient passés par référence, on aurait
    // a == "deux" et b == 1
    // mais ici, on aura toujours
    // a == 1 et b == "deux"
    Quels que soient les types et valeurs pour a et b.

  5. #5
    Membre chevronné
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Billets dans le blog
    1
    Par défaut
    Je rejoins kaari & Watilin sur ce point pour ma part tout ce qui est objet sera passé par référence, tout ce qui est primitive sera par valeur.

    Ton exemple lysandro, utilise deux primitives. Un Number & un String

  6. #6
    Membre extrêmement actif
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 387
    Billets dans le blog
    1
    Par défaut
    Exemple avec un Objet :



    C'est bien l'adresse de l'objet qui est passée.
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  7. #7
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    je ne sais pas quel est le langage de préilection de lysandro
    Mais je pense qu'il y a confusion sur le terme référence.

    il existe 3 façon de passer une variable à une fonction.
    Par valeur
    Par référence
    Par pointeur

    Le passage par valeur est facile à comprendre.
    La valeur est donnée à la fonction et celle-ci ne connait pas la variable. elle ne peut donc pas la modifier.

    Le passage par référence conciste à donner une référence à la variable en parrametre à la fonction.
    La fonction a donc connaissance de la variable et peut en modifier la valeur. mais elle ne peut pas modifier la variable elle même.
    par exemple si je passe un objet User dont le nom est toto je peut modifier le non de User mais cela restera User.

    Le passage par pointeur conciste à donner une référence sur l'adresse de la variable.
    la fonction peut donc accéder à la valeur.
    elle a aussi connaissance de la variable et peut modifier sa valeur
    mais comme elle a une référence à l'adresse elle peut aussi modifier cette référence.

    la chose se résume ainsi
    soit deux varaible référençant le même objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        +--------+
    a ->|        |
        |  x:15  |
    b ->|        |
        +--------+
    Appel par valeur f(a); l'objet référencé par a et par b n'a pas changé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        +--------+
    a ->|        |
        |  x:15  |
    b ->|        |
        +--------+
    Appel par référence f(a); l'objet référencé par a et par b a pas changé mais a et b référence toujour cet objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        +--------+
    a ->|        |
        |  x:32  |
    b ->|        |
        +--------+
    Appel par pointf(a); l'objet référencé par a n'est plus le même que celui référencé par b.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        +--------+
    a ->|  x:32  |
        +--------+
     
        +--------+
    b ->|  x:15  |
        +--------+
    En Javascript seuls les passage par valeur pour les type primitifs et par référence pour tout le reste existe.

    A+JYT

  8. #8
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Citation Envoyé par Watilin Voir le message
    Vrai. Les types primitifs en JS sont les nombres et les booléens. Tout le reste est objet donc passé par référence, ce qui inclut les chaînes, les tableaux, les fonctions, etc.
    Les chaînes de caractères sont des primitives aussi !
    http://msdn.microsoft.com/en-us/libr...(v=vs.94).aspx
    https://developer.mozilla.org/fr/doc...e_donn%C3%A9es

    Si on prend comme définition de primitive tout ce qui n'est pas objet, on a bien "string" instanceof Object === false.

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/04/2010, 06h30
  2. Passage de 'pipe' à une fonction ?
    Par laurent_ifips dans le forum POSIX
    Réponses: 2
    Dernier message: 25/11/2005, 07h06
  3. [JAVASCRIPT] passage d'argument à une fonction
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/06/2005, 18h17
  4. [TASM] Passage d'argument à une macro
    Par sorry60 dans le forum Assembleur
    Réponses: 13
    Dernier message: 23/04/2005, 18h22
  5. Passer une fonction comme argument à une fonction
    Par Cocotier974 dans le forum Général Python
    Réponses: 4
    Dernier message: 29/06/2004, 13h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo