JavaScript funkcijas
JavaScript funkcijas spēj vairāk nekā tikai pievienot ķekars kodiem, gaidot zvana izpildi. Laika gaitā funkcijas ir attīstījušās, radot jaunas definīcijas, izpildes metodes un sintakses. Šis amats aptvers dažas no pašreizējām funkcijām, kuras JavaScript funkcijas ir atskaņojušas līdz šim.
Zinot dažādus veidus, kā izteikt un definēt funkcijas, ir iespēja loģikas īstenošana optimālākā veidā JavaScript. Jūs arī varat vieglāk atbildēt uz intervijas jautājumiem.
Funkciju izteiksmes
Kad vienkārši norādāt funkciju ar funkciju
atslēgvārds, izvēles parametri un koda korpuss, tas ir a funkciju deklarāciju.
Ievietojiet šo deklarāciju JavaScript izteiksmē (piemēram, uzdevumā vai aritmētiskajā izteiksmē), tā kļūst a funkciju izteiksme.
// Funkcijas deklarācijas funkcija function_name () ; // Funkcijas izteiksme var function_name = function () ;
Novērtēšanas laikā tiek izvilktas visas JavaScript deklarācijas (pārvietotas augšpusē). Līdz ar to, pirms funkcijas deklarācija ir labi, rakstiet funkciju zvanu (jo deklarācija tiks pārvietota jebkurā gadījumā).
function_name (); // funkciju zvans [WORKS] funkcija function_name () ;
Funkcijas izteiksmes tomēr netiek paceltas, jo funkcijas kļūst par izteiksmju daļu un nav atsevišķas deklarācijas.
function_name (); // funkciju zvans [WON'T WORK] var funkciju_nosaukums = funkcija () ;
Nekavējoties izteikta funkcija (IIFE)
Tā ir funkciju izpausme, kuras kods tiek izpildīts nekavējoties (tikai vienu reizi, kad tas tiek novērtēts). To var izveidot, vienkārši pievienojot ()
(sintakse, ko izmanto, lai izsauktu funkciju) uzreiz pēc funkcijas izpausmes. Tie var būt anonīmi (bez nosaukuma, lai to sauktu).
Zemāk ir divas visbiežāk sastopamās sintakses, lai izveidotu IIFE:
(funkcija option_function_name () // body ());
un
(funkcija option_function_name () // body) ();
Iekavās ap funkciju deklarāciju tā tiek pārvērsta par izteiksmi un pēc tam pievienota ()
pēc tam, kad tā izsauc funkciju. Jūs varat izmantot citus veidus, kā izveidot IIFE tik ilgi, cik jūs pievienojat ()
pēc funkcijas izpausmes (piemēram, zemāk), bet vēlamās metodes ir iepriekšminētās divas.
// Daži veidi, kā izveidot IIFEs funkciju () / *… * / (); + funkcija () / *… * / (); jauna funkcija () / *… * /;
IIFE ir ideāli piemērots, lai rakstītu kodu, kam nepieciešams izpildīt tikai vienu reizi, nosaukumu izvietošana, slēgšana, privāto mainīgo izveidošana un vairāk. Zemāk ir piemērs IIFE lietošanai.
var page_language = (funkcija () var lang; // kods, lai iegūtu lapas atgriešanas valodas valodu;) ();
Kods, lai iegūtu lapas valodu, tiek izpildīts tikai vienu reizi (vēlams pēc lapas ielādes). Rezultāts tiek saglabāts page_language
vēlākai izmantošanai.
Metodes
Ja funkcija ir objekta īpašums, to sauc par metodi. Tā kā funkcija ir arī objekts, funkcija citā funkcijā ir arī metode. Zemāk ir piemērs objekta iekšējai metodei.
var calc = add: funkcija (a, b) return a + b, sub: funkcija (a, b) return a-b console.log (calc.add (1,2)); // 3 konsole.log (aprēķināts apak. (80,2)); 78
The pievienot
un sub
funkcijas ir aprēķ
objektu.
Tagad funkcijai piemērā:
funkcija add (a) atgriešanās funkcija (b) return a + b; console.log (pievienot (1) (2)); // Izeja ir 3
Atgrieztā anonīma funkcija ir funkcionēšanas metode pievienot
.
Piezīme: kopš parametra (a
) funkcijas pievienot
iepriekš minētajā piemērā ir pieejama šāda funkcijas atsaukšana, šāda veida process tiek saukts karija.
Konstruktori
Pievienojot jauns
atslēgvārdu pirms funkcijas un to sauc, tas kļūst par konstruktoru, kas rada gadījumus. Zemāk ir piemērs, kur konstruktori tiek izmantoti, lai izveidotu gadījumus Augļi
un vērtības tiek pievienotas katram Augļi
īpašības.
funkcija Augļi () var nosaukums, ģimene; // Zinātniskais nosaukums un ģimene this.getName = funkcija () atgriešanās nosaukums;; this.setName = funkcija (vērtība) name = value; this.getFamily = funkcija () atgriešanās ģimene;; this.setFamily = funkcija (vērtība) family = value; var apple = jauns auglis (); apple.setName ("Malus domestica"); apple.setFamily ("Rosaceae"); var orange = jauns Augļi (); orange.setName ("Citrus Ã? Â?¢Â? sinensis "); orange.setFamily (" Rutaceae "); console.log (orange.getName ()); //" Citrus Ã?¢Â? sinensis "console.log (apple.getName ()); //" Malus domestica "console.log (orange.getFamily ()); //" Rutaceae "
Bultas funkcijas (ES6 standarts) [Tikai Firefox]
Jauna funkcijas definīcija no ES6 Standard nodrošina īsāku sintaksi funkciju izteiksmei. Sintakse ir
() => / * korpuss * /
Šī parauga funkcija:
var sing = function () console.log ('dziedāšana ...');
ir tāds pats kā:
var sing = () => console.log ('dziedāšana…');
Bultas funkcijas ir anonīmas un tām nav sava to
vērtību, to
iekšpusē tas būs tāds pats kā to
pievienotajā kodā. Arī jūs nevarat to mainīt uz konstruktoru jauns
atslēgvārdu.
Tie ir noderīgi, kad vēlaties to
iekšpusē funkcija, kas ir tāda pati kā ārpusē, un tā īsākā sintakse padara kodu rakstīšanas funkciju par īsu funkciju (piemēram, zemāk)
setInterval (funkcija () console.log ('message'), 1000);
vērā
setInterval (() => console.log ('message'), 1000);
Ģeneratora funkcijas (ES6 standarts) [Tikai Firefox]
Vēl viena jauna funkcijas definīcija no ES6 standarta ir ģeneratora funkcija. Ģeneratora funkcijas spēj apturēt un turpināt tās izpildi. Tās sintakse ir:
funkcija * function_name ()
vai
funkcija * function_name ()
Ģeneratora funkcijas rada iteratorus. Iterators ir Nākamais
metode tiek izmantota, lai izpildītu kodu ģeneratora funkcijas iekšienē, līdz raža
ir sasniegts atslēgvārds. Pēc tam, iterētā vērtība, ko identificē raža
atslēgvārdu atdod ģeneratora funkcija un izpilde tiek apturēta.
Ģeneratora funkcija atkal tiek izpildīta, kad Nākamais
metode tiek izsaukta līdz nākamajai raža
ir sasniegts atslēgvārds. Kad viss ir raža
izteiksmes tiek izpildītas, atdeve tiek iegūta nenoteikts
.
Zemāk ir vienkāršs piemērs:
funkcija * generator_func (skaits) for (var i = 0; iŠeit ir vēl viens piemērs:
funkcija * randomIncrement (i) iznākums i + 3; i + 5; i + 10; i + 6; var itr = randomIncrement (4); console.log (itr.next ().) vērtība); // 7 console.log (itr.next ().) Vērtība); // 9 console.log (itr.next ().) Vērtība); 14Ir arī
raža *
izteiksme, kas nodod vērtību citai ģeneratora funkcijaifunkcija * augļi (augļi) raža * dārzeņi (augļi); raža "Vīnogas"; funkcija * veggies (augļi) ražas augļi + un spināti ”; ražas augļi + "un brokoļi"; ražas augļi + "un gurķi"; var itr = augļi ("Apple"); console.log (itr.next ().) vērtība); // "Apple un spināti" console.log (itr.next ().) Vērtība); // "Apple un brokoļi" console.log (itr.next ().) Vērtība); // "Apple un gurķi" console.log (itr.next ().) Vērtība); // "Vīnogas" console.log (itr.next ().) Vērtība); //nenoteiktsĢeneratora funkcijas ir noderīgas, ja vēlaties, lai pa vienai no tām izvēlētos vēlamos koda punktus, pauzējot to, nevis vienā virzienā, piemēram, izmantojot lokalizāciju..
Secinājums
Esmu iekļāvis zemāk esošo atsauču sarakstu, kur atradīsiet saites uz atsaucēm un rakstiem, kas padziļināti aplūko dažādus tematus. Abas ES6 standarta funkcijas darbosies tikai Firefox.
Atsauces
- ECMAScript valoda: funkcijas un klases
- Tūlītēja izsaukuma funkcija (IIFE)
- ES6 ģeneratoru pamati
- Bultas funkcijas
- Funkcija - Mozilla izstrādātāju tīkls