Selles õpetuses saate näidete abil õppida JavaScripti tagasihelistamisfunktsioonide kohta.
Funktsioon on koodiplokk, mis täidab kutsumisel teatud ülesande. Näiteks,
// function function greet(name) ( console.log('Hi' + ' ' + name); ) greet('Peter'); // Hi Peter
Ülalolevas programmis edastatakse greet()
funktsiooni argumendina stringi väärtus .
JavaScripti abil saate funktsiooni argumendina edastada ka funktsioonile. Seda funktsiooni, mis edastatakse argumendina teise funktsiooni sees, nimetatakse tagasihelistamisfunktsiooniks. Näiteks,
// function function greet(name, callback) ( console.log('Hi' + ' ' + name); callback(); ) // callback function function callMe() ( console.log('I am callback function'); ) // passing function as an argument greet('Peter', callMe);
Väljund
Tere Peter, ma olen tagasihelistamisfunktsioon
Ülaltoodud programmis on kaks funktsiooni. greet()
Funktsiooni kutsumisel edastatakse kaks argumenti (stringi väärtus ja funktsioon).
callMe()
Funktsioon on tagasihelistamise funktsioon.
Tagasihelistamise funktsiooni eelis
Tagasihelistamisfunktsiooni kasutamise eeliseks on see, et võite oodata eelmise funktsioonikõne tulemust ja seejärel täita teise funktsioonikõne.
Selles näites setTimeout()
jäljendame meetodit programmi, mille käivitamine võtab aega, näiteks serverist pärinevate andmete jäljendamiseks.
Näide: programm koos setTimeout ()
// program that shows the delay in execution function greet() ( console.log('Hello world'); ) function sayName(name) ( console.log('Hello' + ' ' + name); ) // calling the function setTimeout(greet, 2000); sayName('John');
Väljund
Tere John Tere maailm
Nagu teate, käivitab meetod setTimeout () määratud aja möödudes koodiploki.
Siin greet()
kutsutakse funktsiooni pärast 2000 millisekundit ( 2 sekundit). Selle ootamise ajal sayName('John');
hukatakse. Sellepärast trükitakse Hello John enne Hello worldi.
Ülaltoodud kood täidetakse asünkroonselt (teine funktsioon; sayName()
ei oota esimese funktsiooni täitmist greet()
).
Näide: tagasihelistamisfunktsiooni kasutamine
Ülaltoodud näites ei oota teine funktsioon esimese funktsiooni valmimist. Kui soovite enne järgmise käsu täitmist oodata eelmise funktsioonikõne tulemust, võite kasutada tagasihelistamisfunktsiooni. Näiteks,
// Callback Function Example function greet(name, myFunction) ( console.log('Hello world'); // callback function // executed only after the greet() is executed myFunction(name); ) // callback function function sayName(name) ( console.log('Hello' + ' ' + name); ) // calling the function after 2 seconds setTimeout(greet, 2000, 'John', sayName);
Väljund
Tere maailm Tere John
Ülaltoodud programmis käivitatakse kood sünkroonselt. sayName()
Funktsioon on möödas kui argumendi greet()
funktsioon.
setTimeout()
Meetodi hukatakse greet()
funktsiooni alles pärast 2 sekundit. sayName()
Funktsioon ootab aga funktsiooni täitmist greet()
.
Märkus . Tagasihelistamisfunktsioon on kasulik, kui peate ootama tulemust, mis võtab aega. Näiteks serverist pärinevad andmed, kuna andmete saabumine võtab aega.