Maison  >  Article  >  Applet WeChat  >  Bases du développement du programme WeChat Mini : fonctions de rappel, fonctions anonymes et fermetures (4)

Bases du développement du programme WeChat Mini : fonctions de rappel, fonctions anonymes et fermetures (4)

Y2J
Y2Joriginal
2017-04-25 09:25:145089parcourir

À proprement parler, ce n'est pas un tutoriel sur l'applet WeChat, mais j'utiliserai le code app.js de l'article précédent comme exemple, juste pour que cela compte.

Fonction de rappel

La fonction de rappel peut être un peu difficile à comprendre pour les étudiants qui débutent en programmation. Après tout, l'utilisation de la fonction de rappel est contraire au processus intuitif d'exécution séquentielle du programme.

Imaginez que vous commandez un plat à emporter. Une façon est de vérifier si le plat à emporter est arrivé régulièrement. L'autre façon est de montrer votre numéro de téléphone au livreur et de vous appeler lorsqu'il arrive.

Il est facile de voir que la deuxième solution est plus efficace. En fait, lorsque ce mécanisme de notification est appliqué au champ de programmation, il s'agit de la fonction de rappel.

Les étudiants qui sont familiers avec le développement win32 doivent savoir qu'un cadre de programme Windows typique est une boucle de messages plus une fonction de procédure de fenêtre. Le système Windows prend en charge l'acceptation du message, puis appelle la fonction de procédure de fenêtre du développeur pour compléter la logique spécifique de traitement du message. La fonction de procédure de fenêtre est une fonction de rappel.

Pourquoi une fonction de rappel est nécessaire

Prenons le programme win32 ci-dessus comme exemple. On sait que pour des raisons de sécurité, le système d'exploitation Windows ne permet pas aux développeurs d'accéder directement aux ressources matérielles. Les développeurs Microsoft fournissent une API pour gérer la boucle de messages, mais la logique de réponse pour des messages spécifiques doit être fournie par le développeur. Dans ce cas, la fonction de rappel est une bonne solution d'implémentation.

Pour donner un autre exemple, imaginez que vous êtes impliqué dans le développement d'un projet de logiciel de gestion d'appareils de téléphonie mobile et que vous êtes responsable du module de communication sous-jacent des appareils. Lorsque l'utilisateur insère le périphérique dans l'ordinateur, vous devez en informer le module de niveau supérieur pour le traiter. Par souci de flexibilité et de polyvalence, vous ne pouvez pas placer la logique de traitement lorsque l'appareil est connecté dans le module dont vous êtes responsable. À ce stade, l'appelant de niveau supérieur peut fournir une fonction de rappel, et votre module appelle la fonction de rappel lorsque. l'appareil est connecté.

Concernant les fonctions de rappel, il existe un critère dit hollywoodien : Ne m'appelle pas ;

Fonction anonyme

Dans des langages tels que c et c++, lorsque vous devez utiliser une fonction de rappel, vous devez prédéfinir un corps de fonction. La fonction de rappel n'est généralement fournie qu'à d'autres modules pour l'appel. Afin de simplifier le codage, les langages de script ultérieurs tels que JavaScript prennent en charge les fonctions anonymes. (Remarque : le nouveau standard C++ a également commencé à prendre en charge les fonctions anonymes, appelées fonctions Lambda)

getUserInfo:function(cb){
    var that = this
    if(this.globalData.userInfo){
      typeof cb == "function" && cb(this.globalData.userInfo)
    }else{
      //调用登录接口
      wx.login({
        success: function () {
          wx.getUserInfo({
            success: function (res) {
              that.globalData.userInfo = res.userInfo
              typeof cb == "function" && cb(that.globalData.userInfo)
            }
          })
        }
      })
    }
  },

Le code ci-dessus provient de app.js dans le didacticiel précédent. Lors de l'appel de wx.login, transmettez un anonyme. La fonction est utilisée pour effectuer un traitement logique une fois l'appel réussi, ce qui correspond à la partie après le succès. Vous pouvez voir qu'il n'y a qu'une définition de fonction mais pas de nom de fonction, donc sauf en tant que fonction de rappel, la fonction ne peut pas être appelée ailleurs.

En fait, les fonctions anonymes ne sont qu'une simplification du codage, mais les avantages qu'elles apportent ne sont pas seulement une réduction du codage.

Fermeture

Dans la technologie de programmation, la fermeture devrait être une technologie plus avancée.
Lors de l'utilisation de fonctions de rappel, cela implique généralement le passage d'un certain contexte. Dans des langages tels que c/c++, des variables globales ou de la mémoire tas sont utilisées pour transmettre le contexte. Les inconvénients des variables globales sont évidents et la mémoire tas est sujette aux fuites de mémoire. Dans les langages de script plus avancés, le transfert de contexte peut être facilement réalisé grâce à la technologie de fermeture.

En prenant le code ci-dessus comme exemple, that.globalData.userInfo = res.userInfo est exécuté dans la fonction de rappel pour enregistrer les informations utilisateur. La variable that est attribuée par var that = this, donc la variable pointe. à l'objet application lui-même, afin que les informations utilisateur puissent être enregistrées avec succès.

Nous pouvons voir que l'objet that est une variable sur la pile de méthodes getUserInfo. Sans technologie de fermeture, la fonction de rappel anonyme ici ne peut pas utiliser directement la variable that, donc l'objet app doit être transmis à la fonction de rappel. (Variables globales ou paramètres de fonction), et avec la prise en charge de la technologie de fermeture, la fonction de rappel peut accéder à cette variable tout comme si vous utilisiez des variables internes de la fonction, ce qui est beaucoup plus pratique en termes de syntaxe.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn