JavaScript/Anonim függvények
Előző: Funkciók | Index | Következő: Objektumalapú programozás |
A névtelen függvény olyan függvény, amelyet úgy deklaráltak, hogy nincs rá utaló név szerinti azonosító. Mint ilyen, egy névtelen függvény általában nem hozzáférhető a kezdeti létrehozása után.
Normális függvény definíciója:
function hello() { alert('Hello world');}hello();
Anonim függvény definíciója:
var anon = function() { alert('I am anonymous');}anon();
A névtelen függvények egyik gyakori felhasználása más függvények argumentumaként. Egy másik gyakori felhasználás a lezárás, amelyről lásd még a Zárások fejezetet.
Más függvények argumentumaként való felhasználás:
setTimeout(function() { alert('hello');}, 1000);
Fentebb az anonim függvényt átadjuk a setTimeout-nak, amely a függvényt 1000 milliszekundum múlva hajtja végre.
Zárásként való felhasználás:
(function() { alert('foo');}());
A fenti anonim utasítások bontása:
- A környező zárójelek az anonim függvény burkolata
- A zárójelek a függvény hívását kezdeményezik, és tartalmazhatnak argumentumokat
Az előző példát másképpen is megírhatjuk, és ugyanazt az eredményt kapjuk:
(function(message) { alert(message);}('foo'));
A fentiek alternatív ábrázolása a kezdeményező zárójeleket a környező zárójelekhez helyezi, és nem magához a függvényhez, ami zavart okoz, hogy miért van szükség egyáltalán a környező zárójelekre.
(function() { // …})();
Néhányan még ahhoz is folyamodtak, hogy a hátráló zárójelek technikájának becsmérlő neveket adjanak, hogy arra ösztönözzék az embereket, hogy a környező zárójelek helyett visszahelyezzék őket a környező zárójelek közé, oda, ahol a függvényt kezdeményezik.
Egy névtelen függvény hivatkozhat önmagára az arguments.callee helyi változóval, ami hasznos a rekurzív névtelen függvényeknél:
// returns the factorial of 10.alert((function(n) { return !(n > 1) ? 1 : arguments.callee(n - 1) * n;})(10));
Az arguments.callee azonban az ECMAScript 5 Strictben elavult. Az arguments.callee-vel kapcsolatos problémák az, hogy lehetetlenné teszi a farokrekurzió megvalósítását (a JavaScript jövőbeli terve), és más this értéket eredményez. Az arguments.callee használata helyett használhatunk named function expressiont is:
// returns the factorial of 10.alert( (function factorial(n) { return (n <= 1) ? 1 : factorial(n - 1) * n;})(10) );
A nyíl függvénykifejezés hasonló ahhoz, amit más programozási nyelvekben lambdának neveznek, és amit az ECMAScript 6 2015-ben vezetett be. Ez egy rövidítést biztosít névtelen függvények létrehozására.
Példák:
- x => x + 1
- Egy névtelen függvény egy argumentummal x, amely x + 1-t ad vissza.
- x => {return x + 1}
- Mint fent, de függvénytesttel.
- (x, y) => x + y
- Egy 2argonos nyílfüggvény.
- (x, y) => {visszatér x + y}
Linkek:
- Funkciók # A_nyílfüggvény kifejezés, fejlesztő.mozilla.org
- Functions/Arrow függvények, developer.mozilla.org