Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exécuter une fonction au lieu de la passer en référence à un

    29 novembre 2011 à 20:50:47

    Bonsoir tout le monde,
    Dans le cours Déboguer votre code dans la partie Exécuter une fonction au lieu de la passer en référence à une variable il est dit la chose suivante:

    Citation : Toto


    Cette erreur est très courante notamment quand il s'agit d'attribuer une fonction à un évènement. Normalement, passer une fonction en référence à une variable consiste à faire ceci :

    function function1() {
      // Code...
    }
    
    var function2 = function1; // On passe en référence la fonction "function1" à la variable "function2".
    
    function2(); // En tentant d'exécuter "function2" ce sera "function1" qui sera exécutée à la place.
    



    Or, vous êtes nombreux à vous tromper et à écrire ceci lors du passage en référence :



    var function2 = function1();
    



    Ce code est faux car vous ne passez pas à function2 la référence vers function1, vous lui passez le retour de cette dernière puisque vous l'exécutez.



    Mais en essayant le code suivant:
    function function1() {
      alert('bonjour');
    }
    
    var function2 = function1();
    

    j'ai constaté qu'il fonctionnait normalement et qu'il affichait le message: bonjour !! Autrement dit l'instruction:
    var function2 = function1();
    
    n'est pas fausse comme c'est dit dans le cours !!
    Alors s'il vous plait, il est où le problème? Merci
    • Partager sur Facebook
    • Partager sur Twitter
      29 novembre 2011 à 21:21:20

      Le code avec l'erreur serait :

      function function1() {
        alert('bonjour');
      }
      
      var function2 = function1();
      
      function2();
      
      • Partager sur Facebook
      • Partager sur Twitter
        29 novembre 2011 à 21:29:04

        Merci Golmote, mais avec ton code j'ai pas d'erreur, car le message "Bonjour" est toujours affiché!!!
        • Partager sur Facebook
        • Partager sur Twitter
          29 novembre 2011 à 21:43:59

          C'est ce que je me disais, mais bizarrement ça ne s'affiche qu'une seule fois; t'as qu'à tester le code, mais bon! même si c'était le cas, appeler la fonction deux fois de manières différentes n'a jamais été une erreur !!
          • Partager sur Facebook
          • Partager sur Twitter
            29 novembre 2011 à 22:11:19

            Ah mais je dis n'importe quoi ! >_<

            Ca s'affiche pas du tout deux fois en effet...

            Le problème, c'est que l'appel de la ligne 7 va échouer et lever une erreur du genre... "fonction2 is not a function". Car le retour de fonction1() a été affecté à fonction2.
            • Partager sur Facebook
            • Partager sur Twitter
              29 novembre 2011 à 23:06:34

              merci Golmote, il y a surement une erreur ça c'est clair, car j'ai en vérifiant la console d'erreurs j'ai trouvé le message d'erreur suivant:fonction2 is not a function, mais le truc sur lequel je suis pas d'accord avec toi, c'est le fait que l'erreur soit dû à l'affectation de de fonction1() à fonction2, ce n'est pas vrai parce que la preuve l'affectation a bien marché et on a bien eu le message attendu, mais je pense que l'erreur c'est tout simplement le fait de vouloir appeler la référence fonction2 comme si c'était une fonction en écrivant:
              function2(); alors que ce n'est pas du tout le cas, et le message d'erreur de la console d'erreurs en est la preuve, en tout cas là j'ai bien compris ce mécanisme, merci encore l'ami
              • Partager sur Facebook
              • Partager sur Twitter
                29 novembre 2011 à 23:16:45

                Si à la fin de fonction1, tu mettais par exemple "return 3;", alors après la ligne 5, fonction2 vaudrait 3. On est d'accord ?

                Là, comme il n'y a pas de return dans fonction1, fonction2 vaut undefined.

                L'alert s'est affichée car fonction1 s'est exécutée. Mais fonction2 ne contient pas une référence vers fonction1. Et c'est de croire que le contraire qui est une erreur commune.
                • Partager sur Facebook
                • Partager sur Twitter
                  30 novembre 2011 à 0:06:59

                  Citation

                  Or, vous êtes nombreux à vous tromper et à écrire ceci lors du passage en référence :

                  var function2 = function1();
                  



                  Ce code est faux car vous ne passez pas à function2 la référence vers function1, vous lui passez le retour de cette dernière puisque vous l'exécutez.



                  C'est bien ce que l'auteur de ta citation a dit ...
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Exécuter une fonction au lieu de la passer en référence à un

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown