JavaScript/Anonymní funkce
Předchozí: Funkce | Index | Další: |
Anonymní funkce je funkce, která byla deklarována bez pojmenovaného identifikátoru, který by na ni odkazoval. Jako taková není anonymní funkce po svém prvním vytvoření obvykle přístupná.
Normální definice funkce:
function hello() { alert('Hello world');}hello();
Definice anonymní funkce:
var anon = function() { alert('I am anonymous');}anon();
Jedním z běžných použití anonymních funkcí je použití jako argumentů jiných funkcí. Další běžné použití je jako uzávěr, o kterém viz také kapitolu Uzávěry.
Použití jako argument jiných funkcí:
setTimeout(function() { alert('hello');}, 1000);
Nahoře je anonymní funkce předána funkci setTimeout, která ji vykoná za 1000 milisekund.
Použití jako uzávěr:
(function() { alert('foo');}());
Rozdělení výše uvedených anonymních příkazů:
- Okolní závorky jsou obalem pro anonymní funkci
- Koncové závorky iniciují volání funkce a mohou obsahovat argumenty
Jiný způsob zápisu předchozího příkladu a získání stejného výsledku:
(function(message) { alert(message);}('foo'));
Alternativní způsob zobrazení výše uvedeného příkladu umisťuje iniciační závorky k okolním závorkám a ne k samotné funkci, což způsobuje zmatek v tom, proč jsou okolní závorky vůbec potřeba.
(function() { // …})();
Někteří se dokonce uchýlili k hanlivému pojmenování techniky ukončovacích závorek ve snaze přimět lidi, aby je přesunuli zpět dovnitř okolních závorek na místo, kde iniciují funkci, namísto okolních závorek.
Anonymní funkce může odkazovat sama na sebe prostřednictvím lokální proměnné arguments.callee, což je užitečné pro rekurzivní anonymní funkce:
// returns the factorial of 10.alert((function(n) { return !(n > 1) ? 1 : arguments.callee(n - 1) * n;})(10));
V ECMAScriptu 5 Strict je však arguments.callee zastaralá. Problémy s arguments.callee spočívají v tom, že znemožňuje dosažení ocasní rekurze (budoucí plán pro JavaScript) a vede k jiné hodnotě this. Místo použití arguments.callee můžete místo toho použít pojmenovaný funkční výraz:
// returns the factorial of 10.alert( (function factorial(n) { return (n <= 1) ? 1 : factorial(n - 1) * n;})(10) );
Šipkový funkční výraz je podobný tomu, co je v jiných programovacích jazycích známé jako lambda, zavedený v ECMAScriptu 6 v roce 2015. Poskytuje zkratku pro vytváření anonymních funkcí.
Příklad:
- x => x + 1
- Anonymní funkce s jedním argumentem x, která vrací x + 1.
- x => {vrátit x + 1}
- Jako výše, ale s tělem funkce.
- (x, y) => x + y
- Šipková funkce se dvěma argy.
- (x, y) => {vrátí x + y}
Odkazy:
- Funkce # Výraz_šipková funkce, vývojář.mozilla.org
- Funkce/šipkové funkce, developer.mozilla.org