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'une valeur locale d'une fonction vers une autre


Sujet :

JavaScript

  1. #1
    Membre très actif
    Homme Profil pro
    rien
    Inscrit en
    Décembre 2015
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 282
    Par défaut Passage d'une valeur locale d'une fonction vers une autre
    Bonsoir

    Vous sauriez comment une fonction peut faire passer le contenu de sa variable locale à une autre fonction pour un traitement avec cette valeur ?
    ça ne fonctionne pas quand je fais un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function envoie(){
     
      var a=1;
     
      var setInterval("ajoute(15,a)",100);
    }
    ça me dit : variable "a" non définie dans l'instruction setInterval().

    Je suis pour les variables locales, mais qu'est-ce que c'est embêtant.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut
    Sur ton exemple, j'aurais fais un truc comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function f1(){
    var a=1;
    ajoute(15,a);
    }
     
    function envoie{
    setInterval(f1,100);
    }

  3. #3
    Membre très actif
    Homme Profil pro
    rien
    Inscrit en
    Décembre 2015
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 282
    Par défaut
    Salut

    Je peux pas faire ça, car la fonction ajoute(), qui est f1 sur ton exemple, va remettre chaque fois "a" à la valeur 1, à cause du setInterval.
    Ton exemple est bien dans le principe, mais a vaudra toujours 1 dans ce cas :/

    Ce n'est pas ce que je souhaite, il faut que le a continue de s'incrémenter dans la fonction ajoute.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function ajoute(inc,a){
       a+=inc; // s'incrémente de 2.
       console.log(a);
    }
     
    // Si inc=2 alors Affiche : 0 2 4 6 8 10 etc...

    Déjà je trouve bizarre dans ma fonction (premier post) que la variable "a" ne soit pas reconnue dans le setInterval alors qu'elle est déclarée juste avant l'appel au setInterval, c'est bizarre ça.


    Pour précision, voici mon code complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function ajoute(inc,a){
       a+=inc; // s'incrémente de 2.
       console.log(a);
    }
     
    function envoie(){
       var a=5;
       compteur=setInterval("ajoute(10,a)",100);
    }
    Ce n'est pas un meilleur code que je recherche, mais comprendre comment je pourrais faire reconnaitre la variable "a" à setInterval().

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut
    Jusqu'à présent dans tous les exemples que j'ai pu voir, je n'ai jamais vu de fonction avec un paramètre utilisé dans setInterval, ça m'étonnerait que ce soit impossible pourtant.

    Sinon tu pourrais faire une sorte de compromis et déclarer ta fonction de calculer à l'intérieur de l'autre fonction afin qu'elle connaisse les variables sans les passer en paramètre (ce qui semble être la source du problème).

    C'est pas la solution que tu recherches visiblement mais tu devrais pouvoir contourner le problème comme ça.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function envoie(){
       var a=5;
      var inc=2;
    //a et inc connu dans ajoute
       function ajoute(){
       a+=inc; // s'incrémente de 2.
       console.log(a);
    //tu mets à jour ou non les valeurs de a ou inc à chaque appel de la fonction.
    }
       compteur=setInterval(ajoute,100);
    };

  5. #5
    Membre très actif
    Homme Profil pro
    rien
    Inscrit en
    Décembre 2015
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 282
    Par défaut
    Salut Amnael, merci de ton aide

    La première fonction en fait doit envoyer la valeur et c'est à la deuxième fonction de faire l'incrémentation parce que cette deuxième fonction doit se répéter tant que les données (incrément et a) lui sont envoyés par la première fonction grace au setinterval.

    Jusqu'à présent dans tous les exemples que j'ai pu voir, je n'ai jamais vu de fonction avec un paramètre utilisé dans setInterval, ça m'étonnerait que ce soit impossible pourtant.
    Pour ce qui est des paramètres dans la fonction du setInterval, oui c'est normal qu'il puisse y en avoir puisque la fonction ajoute(increment,valeur) est une fonction normale avec un passage de variables de façon classique.

    Je vais voir ton idée pour tester, je suis pas en forme là.

    Au passage je te signale juste que ton exemple n'a pas besoin de la fonction ajoute() dans ce cas
    Il suffit d'écrire l'incrémentation directement.

  6. #6
    Membre très actif
    Homme Profil pro
    rien
    Inscrit en
    Décembre 2015
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 282
    Par défaut
    J'ai fait d'une autre façon finalement, et je n'ai plus besoin de ce code, mais la question reste en suspend quand même : Comment une fonction externe à une première peut utiliser une variable déclarée en local dans la premiere ? Je crois que ce cas n'est pas possible avec setInterval() non ?

    Par exemple si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function compte(increment){ // Compte en ajoutant l'incrément voulu.
       var compteur=compteur+increment;
       console.log(compteur); // Affiche le résultat dans la console du navigateur.
    }
     
    function init(){ // lance un compteur avec incrément de 5.
       var increment=5;
       setInterval(compte(increment),500);
    }
     
    window.onload=init; // démarrer le compteur au chargement (ou rechargement) de la page.
    Ou bien y a t'il une meilleure méthode pour obtenir le même résultat ?

  7. #7
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Salut,

    setInterval() attend une référence à une fonction. Si elle n'a pas été préalablement déclarée, nous pouvons utiliser une fonction anonyme.

    Un petit code (non optimisé) mais bien documenté (enfin je pense).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    function test(){
    	// Déclaration de variables locales
    	var
    		compteur=0,
    		increment=5;
     
    	// Déclaration de fonction
    	function compte(increment){
    		// Ajouter la valeur passée en argument à la variable compteur (déjà déclarée et accessible à cette fonction)
    	   compteur=compteur+increment;
    	   console.log(compteur);
    	}
     
    	// Appeler à intervalle régulier
    	setInterval(
    		// La fonction anonyme...
    		function(){
    			// qui a accès à la variable increment pour la passer à la fonction...
    			compte(increment);
    		},
    		500	// Toutes les  1/2 secondes
    	);
    };

  8. #8
    Membre très actif
    Homme Profil pro
    rien
    Inscrit en
    Décembre 2015
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 282
    Par défaut
    Merci beaucoup, je progresse en programmation avec ce code

    Je ne connaissais pas ce truc de la fonction anonyme
    Merci, je vais étudier ça !

    EDIT :

    Pas pu tester avec la console, ce code n'affiche rien : Mais c'est dû à ma console de FF je sais pas ce qu'elle a :/ (J'ai exposé le problème sur un autre post).
    Sinon avec alert() ça marche impeccable, j'aurais bien progressé c'est important ce truc !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Reprendre une valeur de cellule en fonction d'une autre
    Par mauriceguillier dans le forum Excel
    Réponses: 14
    Dernier message: 25/01/2014, 18h54
  2. [XL-2003] Mettre une couleur de cellule en fonction d'une valeur.
    Par kev159 dans le forum Excel
    Réponses: 2
    Dernier message: 31/08/2010, 15h26
  3. [XL-2003] recuperation d'une valeur d'un option bouton vers une cellule
    Par revemane dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/06/2009, 21h16
  4. Réponses: 11
    Dernier message: 29/05/2007, 08h05
  5. Réponses: 1
    Dernier message: 03/05/2007, 08h10

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