Funkce JavaScriptu
Funkce JavaScriptu jsou schopny více než pouhým uzavřením spousty kódů při čekání na provedení hovoru. Funkce se postupem času vyvíjely, což vedlo k novým definicím, prováděcím metodám a syntaxím. Tento příspěvek bude pokrýt některé ze současných rolí JavaScriptových funkcí, které dosud hrály.
Znát různé způsoby vyjadřování a definování funkcí otevírá možnost implementace logiky optimálním způsobem v JavaScriptu. Také můžete být schopni odpovědět na otázky pohovoru snadněji.
Funkční výrazy
Když jednoduše zadáte funkci funkce
klíčové slovo, volitelné parametry a tělo kódu, je to funkce prohlášení.
Dej tuto deklaraci do výrazu JavaScript (jako v přiřazení nebo aritmetickém výrazu), stane se funkce výraz.
// Funkce deklarace funkce function_name () ; // Funkční výraz var function_name = function () ;
Během vyhodnocování jsou všechny deklarace JavaScriptu zvednuty (posunuty nahoru). Proto je volání funkce funkční před tím, než je deklarace funkce v pořádku (protože deklarace bude stejně přesunuta nahoru).
function_name (); // function call [WORKS] funkce function_name () ;
Funkční výrazy však nejsou zvednuty, protože funkce se stávají součástí výrazů a nejsou samostatnými deklaracemi.
function_name (); // volání funkce [WON'T WORK] var function_name = function () ;
Okamžitě vyvolaný výraz funkce (IIFE)
Je to funkční výraz, jehož kód se okamžitě provede (pouze jednou, když je vyhodnocen). Můžete si ho vytvořit jednoduchým přidáním ()
(syntaxe používaná pro volání funkce) přímo po výrazu funkce. Mohou být anonymní..
Níže jsou uvedeny dvě nejčastější syntaxe pro vytvoření služby IIFE:
(funkce optional_function_name () // body ());
a
(funkce optional_function_name () // body) ();
V závorkách kolem deklarace funkce je převeden na výraz a poté přidán ()
po volání funkce. Můžete použít jiné způsoby, jak vytvořit IIFE tak dlouho, jak budete přidávat ()
po funkčním vyjádření (jako je uvedeno níže), ale výhodnými metodami jsou výše uvedené dva způsoby.
// Některé způsoby, jak vytvořit funkci IIFEs! () / *… * / (); + function () / *… * / (); nová funkce () / *… * /;
IIFE je ideální pro psaní kódu, který je třeba provést pouze jednou, jmenný prostor, vytváření uzávěrů, vytváření soukromých proměnných a další. Níže je uveden příklad použití IIFE.
var page_language = (function () var lang; // Kód pro získání jazyka návratového jazyka;) ();
Kód, aby se jazyk stránky spustil pouze jednou (nejlépe po načtení stránky). Výsledek je uložen v page_language
pro pozdější použití.
Metody
Když je funkce vlastnost objektu, nazývá se metoda. Protože funkce je také objekt, funkce uvnitř jiné funkce je také metoda. Níže je uveden příklad metody uvnitř objektu.
var calc = add: function (a, b) return a + b, sub: funkce (a, b) return a-b console.log (calc.add (1,2)); // 3 console.log (calc.sub (80,2)); 78
přidat
a sub
funkce jsou metody calc
objekt.
Nyní pro funkci v rámci funkčního příkladu:
function add (a) return function (b) return a + b; console.log (přidat (1) (2)); // Výstup je 3
Vrácená anonymní funkce je metoda funkce přidat
.
Poznámka: Od parametru (A
) funkce přidat
ve výše uvedeném příkladu je k dispozici pro následující vyvolání funkce, tento typ procesu je volán kari.
Konstruktory
Když přidáte Nový
klíčové slovo před funkcí a volání, stává se konstruktorem, který vytváří instance. Níže je uveden příklad, ve kterém jsou konstruktory konstruovány instance Ovoce
a hodnoty se přidávají ke každému Ovoce
vlastnosti.
funkce Fruit () var name, rodina; // Vědecké jméno a rodina this.getName = function () return name;; this.setName = function (value) name = hodnota; this.getFamily = function () návratová rodina;; this.setFamily = function (value) family = hodnota; var apple = nový Ovoce (); apple.setName ("Malus domestica"); apple.setFamily ("Rosaceae"); var orange = nový Ovoce (); orange.setName ("Citrus à ??  ?? â ?? sinensis "); orange.setFamily (" Rutaceae "); console.log (orange.getName ()); //" Citrus à ??  ?? â ?? sinensis "console.log (apple.getName ()); //" Malus domestica "console.log (orange.getFamily ()); //" Rutaceae "
Funkce Arrow (Standard ES6) [Pouze ve Firefoxu]
Definice nové funkce z ES6 Standard poskytuje kratší syntaxi pro výraz funkce. Syntaxe je
() => / * tělo * /
Tato ukázková funkce:
var sing = function () console.log ('zpěv…');
je stejné jako:
var sing = () => console.log ('zpěv…');
Funkce šipek jsou anonymní a nemají vlastní tento
hodnota, tento
uvnitř to bude stejné jako tento
v přiloženém kódu. Nelze ji také změnit na konstruktor s Nový
klíčové slovo.
Jsou užitečné, když chcete tento
uvnitř funkce, která má být stejná jako venku a její kratší syntaxe dělá kód pro funkci zápisu v rámci funkce stručné (jako je uvedeno níže)
setInterval (function () console.log ('message'), 1000);
do
setInterval (() => console.log ('zpráva'), 1000);
Funkce generátoru (standard ES6) [Pouze ve Firefoxu]
Další novou definicí funkce z ES6 Standard je funkce generátoru. Funkce generátoru jsou schopny zastavit a pokračovat v provádění. Jeho syntaxe je:
funkce * název_funkce ()
nebo
funkce * název_funkce ()
Generátorové funkce vytvářejí iterátory. Iterátor další
Metoda je pak použita k provedení kódu uvnitř funkce generátoru až do výtěžek
klíčového slova. Po tom, iterovaná hodnota identifikovaná výtěžek
klíčové slovo je vráceno funkcí generátoru a provedení je zastaveno.
Funkce generátoru se opět provede, když se další
zavolá až do dalšího výtěžek
klíčového slova. Jednou všichni výtěžek
výrazy jsou vráceny undefined
.
Níže je jednoduchý příklad:
function * generator_func (count) pro (var i = 0; iZde je další příklad:
funkce * randomIncrement (i) výnos i + 3; výtěžek i + 5; výtěžek i + 10; výtěžek i + 6; var itr = randomIncrement (4); console.log (itr.next (). hodnota); // 7 console.log (itr.next (). Hodnota); // 9 console.log (itr.next (). Hodnota); // 14K dispozici je také
výtěžek*
výraz, který předává hodnotu jiné funkci generátorufunkce * ovoce (ovoce) výnos * vegetariáni (ovoce); výtěžek "Hrozny"; funkce * vegetariáni (ovoce) výnos ovoce + "a špenát"; výnos ovoce + "a brokolice"; výnos ovoce + "a okurka"; var itr = ovoce ("Apple"); console.log (itr.next (). hodnota); // "Apple a Spinach" console.log (itr.next (). Hodnota); // "Apple a Broccoli" console.log (itr.next (). Hodnota); // "Apple a okurka" console.log (itr.next (). Hodnota); // "Hrozny" console.log (itr.next (). Hodnota); // undefinedGenerátorové funkce jsou užitečné, chcete-li procházet hodnotami jeden po druhém ve vašem upřednostňovaném místě v kódu tím, že je pozastavíte, a ne v jednom kroku jako při smyčce přes pole.
Závěr
Níže uvádíme seznam odkazů, kde naleznete odkazy na odkazy a články, které se podrobně zabývají různými tématy. Obě standardní funkce ES6 budou v tuto chvíli fungovat pouze ve Firefoxu.
Reference
- Jazyk ECMAScript: Funkce a třídy
- Okamžitě vyvolaný funkční výraz (IIFE)
- Základy generátorů ES6
- Funkce šipek
- Funkce - Mozilla Developer Network