Heim  >  Artikel  >  WeChat-Applet  >  Grundlagen der WeChat Mini-Programmentwicklung: Rückruffunktionen, anonyme Funktionen und Abschlüsse (4)

Grundlagen der WeChat Mini-Programmentwicklung: Rückruffunktionen, anonyme Funktionen und Abschlüsse (4)

Y2J
Y2JOriginal
2017-04-25 09:25:145088Durchsuche

Genau genommen ist dies kein WeChat-Applet-Tutorial, aber ich werde den app.js-Code im vorherigen Artikel als Beispiel verwenden, nur damit es zählt.

Callback-Funktion

Die Callback-Funktion ist für Programmieranfänger möglicherweise etwas schwer zu verstehen. Schließlich steht die Verwendung der Callback-Funktion im Widerspruch zum intuitiven Prozess der sequenziellen Programmausführung.

Stellen Sie sich vor, Sie bestellen ein Essen zum Mitnehmen. Eine Möglichkeit besteht darin, zu überprüfen, ob das Essen zum Mitnehmen regelmäßig angekommen ist, oder die andere Möglichkeit besteht darin, dem Zusteller Ihre Telefonnummer zu zeigen, und er wird Sie anrufen, wenn es eintrifft.

Es ist leicht zu erkennen, dass die zweite Lösung effizienter ist. Wenn dieser Benachrichtigungsmechanismus auf das Programmierfeld angewendet wird, handelt es sich tatsächlich um die Rückruffunktion.

Studenten, die mit der Win32-Entwicklung vertraut sind, sollten wissen, dass ein typisches Windows-Programm-Framework eine Nachrichtenschleife und eine Fensterprozedurfunktion ist. Das Windows-System übernimmt die Nachrichtenannahme und ruft dann die Fensterprozedurfunktion des Entwicklers auf, um die spezifische Nachrichtenverarbeitungslogik abzuschließen. Die Fensterprozedurfunktion ist eine Rückruffunktion.

Warum eine Rückruffunktion benötigt wird

Nehmen Sie das obige Win32-Programm als Beispiel. Wir wissen, dass das Windows-Betriebssystem Entwicklern aus Sicherheitsgründen keinen direkten Zugriff auf Hardwareressourcen erlaubt. Microsoft-Entwickler stellen eine API zur Verarbeitung der Nachrichtenschleife bereit, die Antwortlogik für bestimmte Nachrichten muss jedoch vom Entwickler bereitgestellt werden. In diesem Fall ist die Rückruffunktion eine gute Implementierungslösung.

Um ein weiteres Beispiel zu nennen: Stellen Sie sich vor, Sie sind an der Entwicklung eines Softwareprojekts für die Geräteverwaltung von Mobiltelefonen beteiligt und für das zugrunde liegende Gerätekommunikationsmodul verantwortlich. Wenn der Benutzer das Gerät in den Computer einfügt, müssen Sie das Modul der oberen Ebene benachrichtigen, um es zu verarbeiten. Aus Gründen der Flexibilität und Vielseitigkeit können Sie die Verarbeitungslogik nicht in das Modul einfügen, für das Sie verantwortlich sind. Zu diesem Zeitpunkt kann der Aufrufer der oberen Ebene eine Rückruffunktion bereitstellen, und Ihr Modul ruft die Rückruffunktion auf Das Gerät ist angeschlossen.

Bei den Rückruffunktionen gibt es ein sogenanntes Hollywood-Kriterium: Rufen Sie mich nicht an, ich rufe Sie an!

Anonyme Funktion

Wenn Sie in Sprachen wie C und C++ eine Rückruffunktion verwenden müssen, müssen Sie einen Funktionskörper vordefinieren. Die Callback-Funktion wird in der Regel nur anderen Modulen zum Aufruf zur Verfügung gestellt. Um die Codierung zu vereinfachen, bieten nachfolgende Skriptsprachen wie JavaScript Unterstützung für anonyme Funktionen. (Hinweis: Der neue C++-Standard unterstützt auch anonyme Funktionen, sogenannte Lambda-Funktionen)

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)
            }
          })
        }
      })
    }
  },

Der obige Code stammt aus app.js im vorherigen Tutorial. Übergeben Sie beim Aufruf von wx.login eine anonyme Funktion Die Funktion wird verwendet, um eine logische Verarbeitung durchzuführen, nachdem der Aufruf erfolgreich war. Dies ist der Teil nach dem Erfolg. Sie sehen, dass es nur eine Funktionsdefinition, aber keinen Funktionsnamen gibt, sodass die Funktion außer als Rückruffunktion nicht an anderer Stelle aufgerufen werden kann.

Tatsächlich stellen anonyme Funktionen nur eine Vereinfachung der Codierung dar, aber die Vorteile, die sie mit sich bringen, bestehen nicht nur in einer reduzierten Codierung.

Abschluss

In der Programmiertechnologie sollte der Abschluss eine fortschrittlichere Technologie sein.
Bei der Verwendung von Rückruffunktionen ist normalerweise die Übergabe eines Kontexts erforderlich. In Sprachen wie c/c++ werden globale Variablen oder Heapspeicher zur Kontextübergabe verwendet. Die Nachteile globaler Variablen liegen auf der Hand und Heapspeicher ist anfällig für Speicherverluste. In fortgeschritteneren Skriptsprachen kann die Kontextübertragung einfach durch die Verschlusstechnologie erreicht werden.

Am Beispiel des obigen Codes wird that.globalData.userInfo = res.userInfo in der Rückruffunktion ausgeführt, um die Benutzerinformationen zu speichern. Die Variable that wird von var that = this zugewiesen, sodass die Variable zeigt zum App-Objekt selbst, damit die Benutzerinformationen erfolgreich gespeichert werden können.

Wir können sehen, dass das Objekt „that“ eine Variable auf dem Methodenstapel „getUserInfo“ ist. Ohne Abschlusstechnologie kann die anonyme Rückruffunktion diese Variable hier nicht direkt verwenden, daher muss das App-Objekt an die Rückruffunktion übergeben werden (Globale Variablen oder Funktionsparameter) und mit der Unterstützung der Abschlusstechnologie kann die Rückruffunktion auf diese Variable zugreifen, genau wie bei der Verwendung interner Variablen der Funktion, was in der Syntax viel praktischer ist.

Das obige ist der detaillierte Inhalt vonGrundlagen der WeChat Mini-Programmentwicklung: Rückruffunktionen, anonyme Funktionen und Abschlüsse (4). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn