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