Minden JavaScript függvény tulajdonképpen egy Function
objektum. Ez látható a következő kódnál, amely igazat ad vissza: (function(){}).constructor === Function
.
Konstruktor
Function()
- Létrehoz egy új
Function
objektumot. A konstruktor közvetlen meghívásával dinamikusan hozhatók létre függvények, de ez biztonsági és azeval
hoz hasonló (de sokkal kevésbé jelentős) teljesítménybeli problémáktól szenved. Viszont, az evaltól ellentétben, aFunction
konstruktor olyan függvényeket hoz létre, melyek mindig a globális hatókörben hajtódnak végre.
Példánytulajdonságok
Function.arguments
- A függvénynek átadott argumentumokból álló tömb.
AFunction
elavult tulajdonsága. Helyette azarguments
objektum (a függvényen belül érhető el) használandó. Function.caller
- A jelenleg futó függvényt meghívó függvényt adja meg.
Ez a tulajdonság elavult, és csak egyes nem szigorú függvényekben működik. Function.displayName
- A függvény megjelenítendő neve.
Function.length
- Megadja a függvény által várt argumentumok számát.
Function.name
- A függvény neve.
Példánymetódusok
Function.prototype.apply(thisArg [, argsArray])
- Meghív egy függvényt, és beállítja a
this
értékét a megadottthisArg
értékre. Az argumentumokArray
objektumként adhatók át. Function.prototype.bind(thisArg[, arg1[, arg2[, ...argN]]])
- Létrehoz egy új függvényt, amely meghívásakor beállítja a
this
értékét a megadottthisArg
értékre. Az opcionálisan megadható argumentumsor az új függvény meghívásakor átadott argumentumok elé lesz fűzve. Function.prototype.call(thisArg[, arg1, arg2, ...argN])
- Meghív egy függvényt, és beállítja a
this
értékét a megadott értékre. Az argumentumok egyszerűen átadhatók. Function.prototype.toString()
- Visszaadja a függvény forráskódját ábrázáló karakterláncot.
Felülírja aObject.prototype.toString
metódust.
Példák
Különbség a Function konstruktor és a függvénydeklaráció között
A Function
konstruktorral létrehozott függvények nem hoznak létre zárványt a létrehozási környezetükhöz, mindig a globális hatókörbe kerülnek. Futtatáskor csak a saját helyi változóit és a globálisakat éri el, a Function
konstruktor meghívásakor aktív hatókörben szereplőket nem. Ez különbözik az eval
függvénykifejezésen történő használatától.
var x = 10;
function createFunction1() {
var x = 20;
return new Function('return x;'); // az |x| a globális |x|-et jelenti
}
function createFunction2() {
var x = 20;
function f() {
return x; // ez az |x| a fent lévő helyi |x|-et jelenti
}
return f;
}
var f1 = createFunction1();
console.log(f1()); // 10
var f2 = createFunction2();
console.log(f2()); // 20
A kód működik a webböngészőkben, de az f1()
ReferenceError
hibát okoz Node.js-ben, mert az x
nem található. Ez azért van, mert a Node legfelső szintű hatóköre nincs a globális hatókörben, és az x
a modulra nézve helyi változó lesz.
Specifikációk
Böngészőkompatibilitás
BCD tables only load in the browser