-2
votes

Pourquoi une fonction dans une fonction ne fonctionne-t-elle pas?

La sortie dans le code ci-dessous est message 1! seulement xxx

la sortie du code ci-dessous (après avoir enregistré la même fonction ci-dessus dans une variable) est Messege1! Messege2! ) xxx

la sortie attendue pour la fonction dans la variable innerfuciton est identique à la fonction d'origine alerte . Comment la sortie du Alertfunction change simplement en l'enregistrant dans une autre variable

Je comprends que le alertthenreturn ne renvoie pas la deuxième alerte mais. ..Pourquoi la deuxième alerte est-elle renvoyée lorsque la fonction est stockée dans une variable (qui est dans cet exemple est innerfonction ) où la fonction d'origine et la variable doivent être identiques et la sortie doit être identique < / p>

Edit: beaucoup dit qu'après ajout de la dernière ligne, le code ne renvoie pas à la fois d'alerte, mais il renvoie réellement les deux alertes.


19 commentaires

Cela n'arrive pas à moins que vous appeliez le «code> innerfonction .


"La fonction donne aux deux alertes bien que rien ne changeait que cela n'a été enregistré dans une autre variable" - il n'y aura pas "I>" Alertes " Sauf si vous avez un Innerfunction ( ) qui est exécuté juste après const fonctionnerfonction = ...


Cela ne montrera que "Message 1!". La valeur de retour est la fonction interne et elle est attribuée à innerfonction mais non appelé.


Oui, je comprends que cela arrive après que j'appelle le innerfonction mais pourquoi ne "code> alerthandreturn fait la même chose? @Guyincognito


Vous devriez utiliser alertthenreturn () () ou l'appeler automatiquement comme retour (fonction () {alerte (message 2! ')}) () .


Je ne comprends pas ce que vous demandez. Si vous retournez une fonction, cela ne s'appelle pas automatiquement. C'est tout le point de retourner une fonction afin que vous puissiez l'appeler plus tard et pas immédiatement.


La deuxième partie de la première fonction n'est-elle pas la deuxième fonction? Alors, pourquoi, lorsque vous appelez le alertthanreturn La deuxième fonction n'est pas appelée et en fonction de ce que vous dites..qui, je ne faisais pas la même chose () au innerfonction


Cet exemple entier n'a aucun sens.


Cet exemple faisait partie du cours d'Udacity sur OOP et non de la mienne, donc je pense que c'est écrit par des professionnels @javascript


@Marcomahere Veuillez fournir un exemple de reproductible minimal de ce que vous ne comprenez pas. Ajouter const-innerfonction = alertthenreturn (); à votre code Fees uniquement la première alerte non la seconde .


@Ivar j'ai édité la question et essayé de rendre ma question plus directe


@Marcomaher Cela ne m'a pas eu plus clair pour moi, j'ai peur. Vous continuez à mentionner que la mise dans une variable change de choses. Pouvez-vous montrer la version sans la variable qui fonctionne différemment? Une comparaison côte à côte des deux versions et des différences serait très utile.


@Marco Maher: Beaucoup d'utilisateurs ici sont des professionnels.


@Lain je ne veux dire aucune infraction, mais je viens de dire que vous voulez savoir que c'était écrit par un professionnel


@IVAR J'ai essayé de faire clairement clairement la lecture de (------------) ... merci pour votre patience pour ma question.


@Marcomaher Votre premier exemple ne déclare que la fonction. Si je mettez ce code dans un éditeur, Cela ne fera rien de tout seul . Comment l'appelez-vous? Et je soupçonne que quelque chose de similaire manque dans le deuxième exemple.


Je l'appelle par console.log (alerteThacanreturn ()) et dans le deuxième exemple console.log (innerfonction ()) Si c'est ce que vous voulez dire par comment je suis l'appelant


@Marcomaher oui qui le rend plus clair. Avec const innerfonction = alertthenreturn (); vous ne stockez pas la fonction extérieure. Pour cela, vous devez utiliser const innerfonction = alertthenreturn; . En ajoutant la parenthèse, vous exécutez la fonction extérieure (et vous tirez la première alerte) et la valeur de retour (la fonction interne) est stockée dans cette variable. Donc, lorsque vous appelez ensuite innerfunction () la fonction interne est exécutée et la deuxième alerte est affichée.


Merci! C'est ce que je cherchais. C'est la réponse simple à cette question. Si vous souhaitez ajouter cela comme une réponse, il sera utile pour les autres et plus facile à trouver


3 Réponses :


0
votes

alertthenreturn () code> fonctionne fonctionne mais vous n'appelez pas cela. Si vous appelez innerfonction code>, vous obtiendrez une seconde.

p>

function alertThenReturn() {
  alert('Message 1!');

  return function () {
    alert('Message 2!');
  };
}

const innerFunction = alertThenReturn()();


2 commentaires

Oui, j'ai eu votre point, mais ce n'est pas ma question que je veux comprendre pourquoi la fonction ne renvoie pas les deux alertes si la fonction principale a été appelée mais si elle a été enregistrée dans une autre variable et appeler cette variable renvoie les deux alertes


Vous ne pouvez pas prendre 2 alertes. Parce que la seconde est de retour, vous ne faites que retourner la fonction qui inclut la méthode d'alerte.



0
votes

Il n'est pas possible que juste const innerfonction = alertthenreturn () code> serait alerter deux fois avec l'implémentation donnée de alertthenreturn code>.

Il alerera une fois: P >

p>

function alertThenReturn() {
  alert('Message 1!');

  return function () {
    alert('Message 2!');
  };
}

alertThenReturn()()


2 commentaires

Vous dites qu'il n'est pas possible que vient de const innerfonction = alertthenreturn () alerterait deux fois avec la mise en œuvre donnée d'alertthenreturn. Mais je veux que tu le dirige. Ça va marcher


@Marcomaher Le premier extrait de ma réponse alerte une fois.



0
votes

Définir simplement la méthode elle-même ne doit pas donner une alerte, mais lorsque vous l'appelez dans la ligne: xxx pré>

Ce qui se passe est que alertthenreturn code> envoie une alerte message, puis renvoie votre fonction interne. Ainsi, lorsque vous exécutez P>

innerFunction()


0 commentaires