Functions (Magyar)

Functions (Magyar)

mindegyik nagyjából ugyanazt teszi, néhány finom különbséggel:

különbség van a függvény neve és a függvényhez rendelt változó között. A függvény neve nem módosítható, míg a függvényhez rendelt változó áthelyezhető. A függvény neve csak a függvény testén belül használható. A függvény testén kívüli használat kísérlete hibát eredményez (vagy undefined ha a függvény nevét korábban var utasítás)., Például:

var y = function x() {};alert(x); // throws an error

a függvény neve akkor is megjelenik, ha a függvény a Function‘s toString metóduson keresztül szerializálódik.

másrészt a függvényhez rendelt változót csak a hatóköre korlátozza, amely garantáltan tartalmazza azt a hatókört, amelyben a függvényt deklarálják.

ahogy a 4. példa mutatja, a függvény neve eltérhet a függvény hozzárendelt változójától. Nincs kapcsolatuk egymással. A függvény deklaráció létrehoz egy változót is, amelynek neve megegyezik a függvény nevével., Így a függvénykifejezések által definiáltakkal ellentétben a függvénynyilatkozatok által definiált függvények név szerint érhetők el a következő hatókörben:

a”new Function' nem rendelkezik függvénynévvel. A SpiderMonkey JavaScript motorban azonban a funkció sorosított formája úgy tűnik, mintha “névtelen”név lenne. Például:alert(new Function()) kimenetek:

function anonymous() {}

mivel a funkciónak valójában nincs neve,anonymous nem olyan változó, amely elérhető a függvényen belül., Például, a következő eredményezne hiba:

var foo = new Function("alert(anonymous);");foo();

Ellentétben funkciók által meghatározott funkcióval kifejezések, vagy a Function kivitelező, a függvény által meghatározott függvény nyilatkozat lehet használni, mielőtt a funkció nyilatkozat is. Például:

foo(); // alerts FOO!function foo() { alert('FOO!');}

egy függvény kifejezés vagy egy függvény deklaráció által definiált függvény örökli az aktuális hatókört. Vagyis a funkció lezárást képez., Másrészt a Function konstruktor által definiált függvény nem örökli a globális hatókörön kívül más hatókört (amelyet az összes funkció örököl).

a függvénykifejezések és függvénynyilatkozatok által definiált függvényeket csak egyszer értelmezzük, míg a Function konstruktor által definiált függvényeket nem. Vagyis a Function konstruktornak átadott függvénytest-karakterláncot minden egyes alkalommal meg kell vizsgálni, amikor a konstruktort hívják., Bár egy függvénykifejezés minden alkalommal bezárást hoz létre, a függvénytestet nem módosítják, így a függvénykifejezések még mindig gyorsabbak, mint a “new Function(...)“. Ezért aFunction konstruktort általában kerülni kell, amikor csak lehetséges.

meg kell azonban jegyezni, hogy a Function constructor ‘s karakterlánc elemzésével létrehozott függvény-kifejezések és függvény-deklarációk nem kerülnek többször elemzésre. Például:

egy függvény deklaráció nagyon könnyen (és gyakran véletlenül) függvénykifejezéssé alakítható., A függvény deklaráció megszűnik, ha vagy:

  • A
  • kifejezés részévé válik, már nem egy függvény vagy maga a szkript” forráseleme”. A “forráselem” egy nem beágyazott utasítás a szkriptben vagy egy függvénytestben:

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük