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 :

Appel de fonction avec et sans ()


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2
    Par défaut Appel de fonction avec et sans ()
    Bonjour à tous,

    Je débute en javascript et il y a une subtilité que je ne dois pas comprendre au niveau de l'appel des fonctions.

    J'ai toujours eu pour habitude d'appeler une fonction avec à la fin les (), hors lors de l'essaie de mon petit code en javascript que je vous montre ci dessous, le code ne marche pas si j'ajoute ces fameuses parenthèses, quelqu'un pourrait m'expliquer le pourquoi de la chose ?

    Voir ligne 5
    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
    function process(){
    	if(req.readyState == 0 ||req.readyState == 4){
    		req.open("GET", "ex1.php", true);
    		alert(req.onreadystatechange);
    		req.onreadystatechange = resultat;	//<-- si j'appelle la fonction avec les () ici cela ne fonctionne pas correctement 
    		req.send(null);
    	} else {
    		setTimeout('process()',1000);
    	}
    }
     
     
     
    function resultat(){
    	if(req.readyState == 4){
    			alert('readyState = ' + req.readyState + ' && status = ' + req.status);
    	} 
    }
    Merci aux personnes qui pourront m'aider à comprendre

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 210
    Par défaut
    Bonjour,
    • lorsque l'on écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    variable = maFonction();
    on affecte à variable le résultat de la fonction maFonction.

    • lorsque l'on écrit
    on affecte à variable la référence à la fonction maFonction.

    Dans le cas de ton req.onreadystatechange c'est la deuxième syntaxe qu'il faut utiliser, affectation de la référence.

    Nota : ton écriture setTimeout('process()',1000); est à remplacer avantageusement par setTimeout(process,1000), on indique juste la référence à la fonction que l'on souhaite exploiter.

  3. #3
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    tout d'abord la référence officielle de la fonction setTimeout => https://developer.mozilla.org/fr/doc...ers/setTimeout

    Il y a 2 syntaxes pour l'appel d'une fonction : avec ou sans quotes.

    Celle avec quote fonctionne comme un éval et n'est pas recommandée, notamment parcequ'elle diffère l'interprétation de ce code à chaque fois qu'il est est appelé;

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     timeoutID = window.setTimeout('var a = 15, b=18, c=a+b;', 2000);
    la syntaxe recommandée est d'indiquer le non d'une fonction à appeler, et son nom seulement, car il permet a la fonction setTimeout de retrouver l’adresse de celle-ci.
    s'il y a des argument pour cette fonction à appeler, ceux-ci doivent être placés a la suite, apres l'argument du délai que la fonction setTimeout.

    exemple, pour la fonction ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function fct_process(a,b,c){
      console.log ('(a, b, c) = (%d, %d, %d )', a,b,c)
    }
    var XYZ = 18;
     
    window.setTimeout( fct_process, 2000,12, 15 , XYZ); 
     
    XYZ = 42;
     
     
    // résultat après 2s => (a, b, c) = ( 12, 15, 18 )
    à noter : seule la valeur des arguments à utiliser sont placés dans une pile, et non leur référence.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2
    Par défaut
    Remerciements,

    votre aide m'a été précieuse pour comprendre ce bout de code

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 22/01/2017, 18h06
  2. EF 6 - Appel de fonction avec dbcontext et sans edmx
    Par Marsupilami_00 dans le forum Entity Framework
    Réponses: 2
    Dernier message: 17/06/2016, 11h02
  3. [Function]Appel de fonction avec paramètre
    Par julienOriano dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/06/2006, 07h48
  4. Appeler une fonction avec "action" ds un
    Par drinkmilk dans le forum ASP
    Réponses: 4
    Dernier message: 20/04/2004, 14h54
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48

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