Every JavaScript function is actually a Function
object. This can be seen with the code (function () {}).constructor === Function
, which returns true.
Every JavaScript function is actually a Function
object. This can be seen with the code (function () {}).constructor === Function
, which returns true.
Function()
Creates a new Function
object. Calling the constructor directly can create functions dynamically but suffers from security and similar (but far less significant) performance issues to eval()
. However, unlike eval()
, the Function
constructor creates functions that execute in the global scope only.
Function.prototype.arguments
Deprecated Non-standard
An array corresponding to the arguments passed to a function. This is deprecated as a property of Function
. Use the arguments
object (available within the function) instead.
Function.prototype.caller
Non-standard Deprecated
Specifies the function that invoked the currently executing function. This property is deprecated, and is only functional for some non-strict functions.
Function.prototype.displayName
Non-standard Optional
The display name of the function.
Function.prototype.length
Specifies the number of arguments expected by the function.
Function.prototype.name
The name of the function.
Function.prototype.prototype
Used when the function is used as a constructor with the new
operator. It will become the new object's prototype.
Function.prototype.apply()
Calls a function with a given this
value and optional arguments provided as an array (or an array-like object).
Function.prototype.bind()
Creates a new function that, when called, has its this
keyword set to a provided value, optionally with a given sequence of arguments preceding any provided when the new function is called.
Function.prototype.call()
Calls a function with a given this
value and optional arguments.
Function.prototype.toString()
Returns a string representing the source code of the function. Overrides the Object.prototype.toString
method.
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.
// Create a global property with `var` var x = 10; function createFunction1() { const x = 20; return new Function('return x;'); // this `x` refers to global `x` } function createFunction2() { const x = 20; function f() { return x; // this `x` refers to the local `x` above } return f; } const f1 = createFunction1(); console.log(f1()); // 10 const 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.
Specification |
---|
ECMAScript Language Specification # sec-function-objects |
Desktop | Mobile | Server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | Deno | Node.js | |
Function |
1 |
12 |
1 |
4 |
3 |
1 |
4.4 |
18 |
4 |
10.1 |
1 |
1.0 |
1.0 |
0.10.0 |
Function |
1 |
12 |
1 |
4 |
3 |
1 |
≤37 |
18 |
4 |
10.1 |
1 |
1.0 |
1.0 |
0.10.0 |
apply |
1 |
12 |
1 |
5.5 |
4 |
1 |
4.4 |
18 |
4 |
10.1 |
1 |
1.0 |
1.0 |
0.10.0 |
arguments |
1 |
12 |
1 |
4 |
3 |
1 |
4.4 |
18 |
4 |
10.1 |
1 |
1.0 |
1.0 |
0.10.0 |
bind |
7 |
12 |
4 |
9 |
11.6 |
5.1 |
4 |
18 |
4 |
12 |
6 |
1.0 |
1.0 |
0.10.0 |
call |
1 |
12 |
1 |
5.5 |
4 |
1 |
4.4 |
18 |
4 |
10.1 |
1 |
1.0 |
1.0 |
0.10.0
When calling this method,
thisArg does not default to the global object. |
caller |
1 |
12 |
1 |
8 |
9.6 |
3 |
4.4 |
18 |
4 |
10.1 |
1 |
1.0 |
1.0 |
0.10.0 |
displayName |
No |
No |
13 |
No |
No |
No |
No |
No |
14 |
No |
No |
No |
No |
No |
length |
1 |
12 |
1 |
4 |
3 |
1 |
4.4 |
18 |
4 |
10.1 |
1 |
1.0 |
1.0 |
0.10.0 |
name |
15 |
14 |
1 |
No |
10.5 |
6 |
4.4 |
18 |
4 |
11 |
6 |
1.0 |
1.0 |
0.10.0 |
toString |
1 |
12 |
1 |
5 |
3 |
1 |
4.4 |
18 |
4 |
10.1 |
1 |
1.0 |
1.0 |
0.10.0 |
function
statementfunction
expressionfunction*
statementfunction*
expressionAsyncFunction
GeneratorFunction
© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function