Függvény

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 az evalhoz hasonló (de sokkal kevésbé jelentős) teljesítménybeli problémáktól szenved. Viszont, az evaltól ellentétben, a Function 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.
A Function elavult tulajdonsága. Helyette az arguments 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 megadott thisArg értékre. Az argumentumok Array 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 megadott thisArg é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 a Object.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

Lásd még: