Mis on JavaScripti tagasihelistamisfunktsioon?

Selles artiklis antakse lühike sissejuhatus tagasihelistamisfunktsioonide kontseptsioonile ja kasutamisele JavaScripti programmeerimiskeeles.

Funktsioonid on objektid

Esimene asi, mida peame teadma, on see, et Javascriptis on funktsioonid esmaklassilised objektid. Sellisena saame nendega töötada samamoodi nagu teiste objektidega, näiteks määrame need muutujatele ja edastame argumentidena muudesse funktsioonidesse. See on oluline, sest just viimane tehnika võimaldab meil laiendada oma rakenduste funktsionaalsust.

Tagasihelistamisfunktsioonid

Tagasihelistamise funktsioon on funktsioon, mis on läbinud argumendina teise funktsiooni, mis "kutsus tagasi" hiljem. Funktsioon, mis aktsepteerib teisi funktsioone argumentidena nimetatakse kõrgemat järku funktsioon , mis sisaldab loogikat kui tagasihelistamise funktsioon saab täita. Nende kahe kombinatsioon võimaldab meil oma funktsionaalsust laiendada.

Tagasihelistamise illustreerimiseks alustame lihtsast näitest:

function createQuote(quote, callback){ var myQuote = "Like I always say, " + quote; callback(myQuote); // 2 } function logQuote(quote){ console.log(quote); } createQuote("eat your vegetables!", logQuote); // 1 // Result in console: // Like I always say, eat your vegetables!

Ülaltoodud näites createQuoteon kõrgema järgu funktsioon, mis aktsepteerib kahte argumenti, teine ​​on tagasihelistamine. logQuoteFunktsiooni kasutatakse läbida nii meie tagasihelistamise funktsioon. createQuoteFunktsiooni (1) käivitamisel pange tähele, et me ei lisa sulge, logQuotekui edastame selle argumendina. Seda seetõttu, et me ei soovi oma tagasihelistamisfunktsiooni kohe käivitada, vaid lihtsalt soovime funktsiooni definitsiooni edastada kõrgema järgu funktsioonile, et seda saaks hiljem täita.

Samuti peame tagama, et kui tagasihelistamisfunktsioon, mille edastame, eeldab argumente, esitame tagasihelistamisel need argumendid (2) . Ülaltoodud näites oleks see callback(myQuote);väide, sest me teame, et eeldame logQuotehinnapakkumise edastamist.

Lisaks võime anonüümseid funktsioone edastada tagasihelistamisena. Allpool toodud üleskutse tulemuseks createQuoteoleks sama tulemus kui ülaltoodud näites:

createQuote("eat your vegetables!", function(quote){ console.log(quote); });

Muide, sa ei pea kasutama sõna "tagasihelistamise" nimena oma argumenti, Javascript peab lihtsalt teadma, et see on õige väide nimi. Ülaltoodud näite põhjal käitub allpool olev funktsioon täpselt samamoodi.

function createQuote(quote, functionToCall) { var myQuote = "Like I always say, " + quote; functionToCall(myQuote); }

Miks kasutada tagasihelistamise funktsioone?

Enamasti loome sünkroonselt töötavaid programme ja rakendusi . Teisisõnu, mõnda meie tegevust alustatakse alles pärast seda, kui eelnevad on lõpule viidud. Sageli ei tea me, kui taotleme andmeid muudest allikatest, näiteks välisest API-st, millal meie andmed tagasi esitatakse. Nendel juhtudel tahame oodata vastust, kuid me ei soovi alati, et kogu meie rakendus peatuks andmete hankimise ajal. Need on olukorrad, kus tagasihelistamisfunktsioonid tulevad kasuks.

Vaatame ühte näidet, mis simuleerib serverile päringut:

function serverRequest(query, callback){ setTimeout(function(){ var response = query + "full!"; callback(response); },5000); } function getResults(results){ console.log("Response from the server: " + results); } serverRequest("The glass is half ", getResults); // Result in console after 5 second delay: // Response from the server: The glass is half full!

Ülaltoodud näites esitame serverile proovitaotluse. Viie sekundi möödudes muudetakse vastust ja meie tagasihelistamisfunktsioon getResultskäivitatakse. Selle toimimiseks nägemiseks saate ülaltoodud koodi oma brauseri arendajatööriista kopeerida / kleepida ja selle käivitada.

Samuti, kui olete juba tuttav setTimeout, olete kogu aeg kasutanud tagasihelistamise funktsioone. Anonüümne funktsiooni argument, mis edastatakse ülaltoodud näite setTimeoutfunktsioonikutsele, on ka tagasihelistamine! Nii et näite algse tagasihelistamise täidab tegelikult teine ​​tagasihelistamine. Olge ettevaatlik ja ärge pesitsege liiga palju tagasihelistamisi, kui saate seda aidata, sest see võib viia nn tagasihelistamiseni! Nagu nimigi ütleb, pole sellega tegelemine rõõm.