La sortie dans le code ci-dessous est la sortie du code ci-dessous (après avoir enregistré la même fonction ci-dessus dans une variable) est Je comprends que le 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. P> P> message 1! code> seulement
Messege1! code>
Messege2! code>) p>
la sortie attendue pour la fonction dans la variable
innerfuciton code > est identique à la fonction d'origine
alerte code>.
Comment la sortie du
Alertfunction code> change simplement en l'enregistrant dans une autre variable h2>
alertthenreturn code> 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 code>) où la fonction d'origine et la variable doivent être identiques et la sortie doit être identique < / p>
3 Réponses :
p> alertthenreturn () code> fonctionne fonctionne mais vous n'appelez pas cela. Si vous appelez
innerfonction code>, vous obtiendrez une seconde.
function alertThenReturn() {
alert('Message 1!');
return function () {
alert('Message 2!');
};
}
const innerFunction = alertThenReturn()();
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.
Il n'est pas possible que juste Il alerera une fois: P > p> const innerfonction = alertthenreturn () code> serait alerter deux fois avec l'implémentation donnée de
alertthenreturn code>.
function alertThenReturn() {
alert('Message 1!');
return function () {
alert('Message 2!');
};
}
alertThenReturn()()
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.
Définir simplement la méthode elle-même ne doit pas donner une alerte, mais lorsque vous l'appelez dans la ligne: Ce qui se passe est que alertthenreturn code> envoie une alerte message, puis renvoie votre fonction interne. Ainsi, lorsque vous exécutez P>
innerFunction()
Cela n'arrive pas à moins que vous appeliez le «code> innerfonction code>.
"La fonction donne aux deux alertes bien que rien ne changeait que cela n'a été enregistré dans une autre variable" i> - il n'y aura pas "I>" Alertes " i> Sauf si vous avez un
Innerfunction ( ) code> qui est exécuté juste après
const fonctionnerfonction = ... code>
Cela ne montrera que "Message 1!". La valeur de retour est la fonction interne et elle est attribuée à
innerfonction code> mais non appelé.
Oui, je comprends que cela arrive après que j'appelle le
innerfonction code> mais pourquoi ne "code> alerthandreturn code> fait la même chose? @Guyincognito
Vous devriez utiliser
alertthenreturn () () code> ou l'appeler automatiquement comme
retour (fonction () {alerte (message 2! ')}) () Code>.
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 code> 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
() code> au
innerfonction code>
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 (); code> à 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 i> 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 ()) code> et dans le deuxième exemple
console.log (innerfonction ()) code> 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 (); code> vous ne stockez pas la fonction extérieure. Pour cela, vous devez utiliser
const innerfonction = alertthenreturn; code>. 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 () code> 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