Every JavaScript function is actually a Function object. This can be seen with the code (function(){}).constructor === Function which returns true.
Constructor
Function()- The
Functionconstructor creates a newFunctionobject. Calling the constructor directly can create functions dynamically, but suffers from security and similar (but far less significant) performance issues toeval. However, unlike eval, theFunctionconstructor creates functions which execute in the global scope only.
Properties and Methods of Function
The global Function object has no methods or properties of its own. However, since it is a function itself, it does inherit some methods and properties through the prototype chain from Function.prototype.
Function prototype object
Properties
Function.prototype.arguments- An array corresponding to the arguments passed to a function.
This is deprecated as a property ofFunction. Use theargumentsobject (available within the function) instead. Function.arityUsed to specifiy the number of arguments expected by the function, but has been removed. Use thelengthproperty instead.Function.prototype.caller- Specifies the function that invoked the currently executing function.
This property is deprecated, and is only functional for some non-strict functions. 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.
SeeObject.prototype.constructorfor more details.
Methods
Function.prototype.apply(thisArg [, argsArray])- Calls a function and sets its
thisto the providedthisArg. Arguments can be passed as anArrayobject. Function.prototype.bind(thisArg[, arg1[, arg2[, ...argN]]])- Creates a new function which, when called, has its
thisset to the providedthisArg. Optionally, a given sequence of arguments will be prepended to arguments provided the newly-bound function is called. Function.prototype.call()- Calls a function and sets its
thisto the provided value. Arguments can be passed as they are. Function.prototype.isGenerator()- Returns
trueif the function is a generator; otherwise returnsfalse. Function.prototype.toSource()- Returns a string representing the source code of the function.
Overrides theObject.prototype.toSourcemethod. Function.prototype.toString()- Returns a string representing the source code of the function.
Overrides theObject.prototype.toStringmethod. Function.prototype[@@hasInstance]()- Used to check which object is an instance of the corresponding constructor function. Since this property is a property of
Function.prototype, it is basically inherited by almost all functions.
Function instances
Function instances inherit methods and properties from Function.prototype. As with all constructors, you can change the constructor's prototype object to make changes to all Function instances.
Examples
Difference between Function constructor and function declaration
Functions created with the Function constructor do not create closures to their creation contexts; they always are created in the global scope. When running them, they will only be able to access their own local variables and global ones, not the ones from the scope in which the Function constructor was created. This is different from using eval with code for a function expression.
var x = 10;
function createFunction1() {
var x = 20;
return new Function('return x;'); // this |x| refers global |x|
}
function createFunction2() {
var x = 20;
function f() {
return x; // this |x| refers local |x| above
}
return f;
}
var f1 = createFunction1();
console.log(f1()); // 10
var f2 = createFunction2();
console.log(f2()); // 20
While this code works in web browsers, f1() will produce a ReferenceError in Node.js, as x will not be found. This is because the top-level scope in Node is not the global scope, and x will be local to the module.
Specifications
| Specification |
|---|
| ECMAScript (ECMA-262) The definition of 'Function' in that specification. |
Browser compatibility
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Function | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 4 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
Function() constructor | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 4 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
apply | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 5.5 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
arguments | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 4 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
arity | Chrome No support No | Edge No support No | Firefox No support No | IE No support No | Opera No support No | Safari No support No | WebView Android No support No | Chrome Android No support No | Firefox Android No support No | Opera Android No support No | Safari iOS No support No | Samsung Internet Android No support No | nodejs No support No |
bind | Chrome Full support 7 | Edge Full support 12 | Firefox Full support 4 | IE Full support 9 | Opera Full support 11.6 | Safari Full support 5.1 | WebView Android Full support 4 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 12 | Safari iOS Full support 6 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
call | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 5.5 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
caller | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 8 | Opera Full support 9.6 | Safari Full support 3 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
displayName | Chrome No support No | Edge No support No | Firefox Full support 13 | IE No support No | Opera No support No | Safari No support No | WebView Android No support No | Chrome Android No support No | Firefox Android Full support 14 | Opera Android No support No | Safari iOS No support No | Samsung Internet Android No support No | nodejs No support No |
isGenerator | Chrome No support No | Edge No support No | Firefox No support 5 — 58 | IE No support No | Opera No support No | Safari No support No | WebView Android No support No | Chrome Android No support No | Firefox Android No support 5 — 58 | Opera Android No support No | Safari iOS No support No | Samsung Internet Android No support No | nodejs No support No |
length | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 4 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
name | Chrome Full support 15 | Edge Full support 14 | Firefox Full support 1 | IE No support No | Opera Full support 10.5 | Safari Full support 6 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 11 | Safari iOS Full support 6 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
toSource | Chrome No support No | Edge No support No | Firefox
Full support
1
| IE No support No | Opera No support No | Safari No support No | WebView Android No support No | Chrome Android No support No | Firefox Android Full support 4 | Opera Android No support No | Safari iOS No support No | Samsung Internet Android No support No | nodejs No support No |
toString | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 5 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
Legend
- Full support
- Full support
- No support
- No support
- 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.
- See implementation notes.
- See implementation notes.
See also
- Functions and function scope
functionstatementfunctionexpressionfunction*statementfunction*expressionAsyncFunctionGeneratorFunction