Mi a visszahívási funkció a JavaScript-ben?

Ez a cikk röviden bemutatja a visszahívási funkciók fogalmát és használatát a JavaScript programozási nyelven.

A függvények objektumok

Az első dolog, amit tudnunk kell, hogy a Javascriptben a függvények első osztályú objektumok. Mint ilyen, ugyanúgy működhetünk velük, mint más objektumokkal, például hozzárendelhetjük őket változókhoz, és argumentumként átadhatjuk más függvényekhez. Ez azért fontos, mert ez utóbbi technika teszi lehetővé az alkalmazásunk funkcionalitásának bővítését.

Visszahívási funkciók

A visszahívási függvény egy olyan függvény, amelyet argumentumként átadnak egy másik függvénynek, amelyet később "visszahívnak". A függvény, amely elfogadja egyéb funkciók, mint érv az úgynevezett magasabb rendű függvény , amely tartalmazza a logikát , ha a visszahívási funkció kerül végrehajtásra. E kettő kombinációja lehetővé teszi számunkra a funkcionalitás bővítését.

A visszahívások illusztrálásához kezdjünk egy egyszerű példával:

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!

A fenti példában createQuotea magasabb rendű függvény található, amely két argumentumot fogad el, a második pedig a visszahívás. A logQuotefunkciót visszahívási funkcióként adjuk át. Amikor végrehajtjuk az (1)createQuote függvényt , vegye észre, hogy nem zárójeleket fűzünk hozzá, amikor argumentumként továbbadjuk. Ez azért van, mert nem akarjuk azonnal végrehajtani a visszahívási függvényünket, egyszerűen át akarjuk adni a függvénydefiníciót a magasabb rendű függvényhez, hogy később végrehajtható legyen.logQuote

Biztosítanunk kell azt is, hogy ha az általunk átadott visszahívási függvény argumentumokra számít, akkor a visszahívás végrehajtásakor adjuk meg ezeket az érveket (2) . A fenti példában ez lenne az callback(myQuote);állítás, mivel tudjuk, hogy logQuoteárajánlat átadására számítunk .

Ezenkívül névtelen funkciókat is visszahívásként adhatunk át. Az alábbi hívásnak createQuoteugyanaz az eredménye lenne, mint a fenti példának:

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

Egyébként nem kell a „visszahívás” szót használni az érvelés neveként, a Javascriptnek csak tudnia kell, hogy ez a helyes argumentum neve. A fenti példa alapján az alábbi függvény pontosan ugyanúgy fog viselkedni.

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

Miért érdemes visszahívási funkciókat használni?

Legtöbbször szinkron módon működő programokat és alkalmazásokat hozunk létre . Más szavakkal, egyes műveleteink csak az előzőek befejezése után kezdődnek. Gyakran amikor más forrásokból kérünk adatokat, például egy külső API-ból, nem mindig tudjuk, mikor adják vissza az adatainkat. Ezekben az esetekben szeretnénk megvárni a választ, de nem mindig akarjuk, hogy az egész alkalmazásunk leálljon, amíg az adataink beolvasódnak. Ilyen esetekben a visszahívási funkciók jól jöhetnek.

Vessen egy pillantást egy példára, amely szimulálja a szerverhez intézett kéréseket:

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!

A fenti példában hamis kérelmet intézünk egy szerverhez. 5 másodperc elteltével a válasz módosul, majd a visszahívási funkciónk getResultsvégrehajtásra kerül. Ahhoz, hogy ezt működés közben lássa, átmásolhatja / beillesztheti a fenti kódot a böngészője fejlesztői eszközébe, és végrehajthatja azt.

Továbbá, ha már ismeri setTimeout, akkor végig használta a visszahívási funkciókat. A fenti példa függvényhívásába továbbított névtelen függvény argumentum setTimeoutvisszahívás is! Tehát a példa eredeti visszahívását egy másik visszahívás hajtja végre. Vigyázzon, hogy ne fészkeljen be túl sok visszahívást, ha tud ebben segíteni, mert ez a „visszahívási pokol” nevet viselheti! Ahogy a neve is mutatja, nem öröm foglalkozni vele.