Függvény

A Function konstruktora létrehoz egy új Function objektumot. A konstruktort közvetlenül meghívva dinamikusan hozhat létre függvényeket, de ez biztonsági és teljesítménybeli problémákat okozhat hasonlóan a eval híváshoz. Viszont az eval függvénnyel ellentétben a Function konstruktor csak olyan függvényeket hoz létre, amely a globális hatókörben hajtódik végre.

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.

Szintaxisa

new Function ([arg1[, arg2[, ...argN]],] függvényTörzs)

Paraméterei

arg1, arg2, ... argN
A függvény által használt formális argumentumok elnevezéseai. Mindegyik kötelezően egy-egy karakterlánc, amely érvényes JavaScript azonosítónak felel meg, vagy ilyen típusú karakterláncok listája vesszővel elválasztva. Például „x”, „theValue”, vagy „a,b”.
függvényTörzs
Azokat a JavaScript utasításokat tartalmazó karakterlánc, amely megadja a függvény definícióját.

Leírás

A Function objektumokat a Function konstruktorral lehet létrehozni, és a függvény meghívásakor kerülnek feldolgozásra. Ez kevésbé hatékony, mint egy függvénykifejezés vagy egy függvény utasítás és annak meghívása a kódban, mert az ilyen függvények a kód többi részével együtt kerülnek feldolgozásra.

Az összes a függvénynek átadott argumentum azonosítónévként lesz kezelve a létrehozandó függvényben, a megadásuk sorrendjében.

A Function konstruktor függvényként történő (new operátor nélkül) meghívása ugyanazt eredményezi, mintha konstruktorként hívta volna meg.

A Function tulajdonságai és metódusai

A globális Function objektumnak sem metódusai, sem tulajdonságai sincsenek. Viszont, mivel maga is egy függvény, ezért örököl néhány metódust és tulajdonságot a Function.prototype prototípusláncából.

Function prototípus objektum

Tulajdonságok

Function.prototype.arguments
An array corresponding to the arguments passed to a function. This is deprecated as property of Function. Use the arguments object available within the function instead.
Function.arity
Used to specifiy the number of arguments expected by the function, but has been removed. Use the length property instead.
Function.prototype.caller
Specifies the function that invoked the currently executing function.
Function.prototype.length
Specifies the number of arguments expected by the function.
Function.prototype.name
The name of the function.
Function.displayName
The display name of the function.
Function.prototype.constructor
Specifies the function that creates an object's prototype. See Object.prototype.constructor for more details.

Metódusok

Function.prototype.apply()
Calls a function and sets its this to the provided value, arguments can be passed as an Array object.
Function.prototype.bind()
Creates a new function which, when called, has its this set to the provided value, with a given sequence of arguments preceding any provided when the new function was called.
Function.prototype.call()
Calls (executes) a function and sets its this to the provided value, arguments can be passed as they are.
Function.prototype.isGenerator()
Returns true if the function is a generator; otherwise returns false.
Function.prototype.toSource()
Returns a string representing the source code of the function. Overrides the Object.prototype.toSource method.
Function.prototype.toString()
Returns a string representing the source code of the function. Overrides the Object.prototype.toString method.

Function példányok

A Function példányok öröklik a Function.prototype metódusait és tulajdonságait. Ahogy az összes konstruktornál, módosíthatja a konstruktor prototípus objektumát, hogy módosításokat végezzen az összes Function példányon.

Példák

Argumentumok megadása a Function konstruktorral

A következő létrehoz egy Function objektumot, amely két argumentumot fogad.

// A példa közvetlenül futtatható a JavaScript konzolban

// Új függvény létrehozása, amely két argumentumot fogad és visszaadja azok összegét
var adder = new Function('a', 'b', 'return a + b');

// A függvény meghívása
adder(2, 6);
// > 8

Az „a” és „b”  formális argumentumnevek, amelyek a függvénytörzsben használatosak: „return a + b”.

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. Ha futtatja őket, akkor csak a saját helyi változóit és a globálisakat fogják elérni, a Function konstruktor meghívásakor aktív hatókörben szereplőket nem. Ez különbözik attól, mintha az eval függvényt használná egy függvénykifejezéshez.

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 felsző 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

Specification Status Comment
ECMAScript 1st Edition (ECMA-262) Standard Kezdeti definíció. A JavaScript 1.0-ban megvalósítva.
ECMAScript 5.1 (ECMA-262)
The definition of 'Function' in that specification.
Standard
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Function' in that specification.
Standard
ECMAScript Latest Draft (ECMA-262)
The definition of 'Function' in that specification.
Draft

Böngésző kompatibilitás

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
FunctionChrome Full support YesEdge Full support 12Firefox Full support 1IE Full support YesOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes
applyChrome Full support YesEdge Full support 12Firefox Full support 1IE Full support YesOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes
arguments
Deprecated
Chrome Full support YesEdge Full support 12Firefox Full support 1IE Full support YesOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes
arity
DeprecatedNon-standard
Chrome No support NoEdge No support NoFirefox No support NoIE No support NoOpera No support NoSafari No support NoWebView Android No support NoChrome Android No support NoFirefox Android No support NoOpera Android No support NoSafari iOS No support NoSamsung Internet Android No support Nonodejs No support No
bindChrome Full support 7Edge Full support 12Firefox Full support 4IE Full support 9Opera Full support 11.6Safari Full support 5.1WebView Android Full support 4Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 12Safari iOS Full support 6Samsung Internet Android Full support Yesnodejs Full support Yes
callChrome Full support YesEdge Full support 12Firefox Full support 1IE Full support YesOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes
caller
Non-standard
Chrome Full support YesEdge Full support 12Firefox Full support 1IE Full support 8Opera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes
displayName
Non-standard
Chrome ? Edge No support NoFirefox Full support 13IE ? Opera ? Safari ? WebView Android ? Chrome Android ? Firefox Android Full support 14Opera Android ? Safari iOS ? Samsung Internet Android ? nodejs ?
isGenerator
DeprecatedNon-standard
Chrome No support NoEdge No support NoFirefox No support 5 — 58IE No support NoOpera No support NoSafari No support NoWebView Android No support NoChrome Android No support NoFirefox Android No support 5 — 58Opera Android No support NoSafari iOS No support NoSamsung Internet Android No support Nonodejs No support No
lengthChrome Full support YesEdge Full support 12Firefox Full support 1IE Full support YesOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes
nameChrome Full support 15Edge Full support 14Firefox Full support 1IE No support NoOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes
prototypeChrome Full support YesEdge Full support 12Firefox Full support 1IE Full support YesOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes
toSource
Non-standard
Chrome No support NoEdge No support NoFirefox Full support 1IE No support NoOpera No support NoSafari No support NoWebView Android No support NoChrome Android No support NoFirefox Android Full support 4Opera Android No support NoSafari iOS No support NoSamsung Internet Android No support Nonodejs No support No
toStringChrome Full support YesEdge Full support 12Firefox Full support 1IE Full support 5Opera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes

Legend

Full support  
Full support
No support  
No support
Compatibility unknown  
Compatibility unknown
Non-standard. Expect poor cross-browser support.
Non-standard. Expect poor cross-browser support.
Deprecated. Not for use in new websites.
Deprecated. Not for use in new websites.

Lásd még: