Function

TheFunctionobject provides methods forfunctions.In JavaScript, every function is actually aFunctionobject.

Constructor

Function()

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, unlikeeval(),theFunctionconstructor creates functions that execute in the global scope only.

Instance properties

These properties are defined onFunction.prototypeand shared by allFunctioninstances.

Function.prototype.arguments Deprecated Non-standard

Represents the arguments passed to this function. Forstrict,arrow, async, and generator functions, accessing theargumentsproperty throws aTypeError.Use theargumentsobject inside function closures instead.

Function.prototype.caller Deprecated Non-standard

Represents the function that invoked this function. Forstrict,arrow, async, and generator functions, accessing thecallerproperty throws aTypeError.

Function.prototype.constructor

The constructor function that created the instance object. ForFunctioninstances, the initial value is theFunctionconstructor.

These properties are own properties of eachFunctioninstance.

displayName Non-standard Optional

The display name of the function.

length

Specifies the number of arguments expected by the function.

name

The name of the function.

prototype

Used when the function is used as a constructor with thenewoperator. It will become the new object's prototype.

Instance methods

Function.prototype.apply()

Calls a function with a giventhisvalue and optional arguments provided as an array (or anarray-like object).

Function.prototype.bind()

Creates a new function that, when called, has itsthiskeyword 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 giventhisvalue and optional arguments.

Function.prototype.toString()

Returns a string representing the source code of the function. Overrides theObject.prototype.toStringmethod.

Function.prototype[Symbol.hasInstance]()

Specifies the default procedure for determining if a constructor function recognizes an object as one of the constructor's instances. Called by theinstanceofoperator.

Examples

Difference between Function constructor and function declaration

Functions created with theFunctionconstructor 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 theFunctionconstructor was created. This is different from usingeval()with code for a function expression.

js
// Create a global property with `var`
varx=10;

functioncreateFunction1(){
constx=20;
returnnewFunction("return x;");// this `x` refers to global `x`
}

functioncreateFunction2(){
constx=20;
functionf(){
returnx;// this `x` refers to the local `x` above
}
returnf;
}

constf1=createFunction1();
console.log(f1());// 10
constf2=createFunction2();
console.log(f2());// 20

While this code works in web browsers,f1()will produce aReferenceErrorin Node.js, asxwill not be found. This is because the top-level scope in Node is not the global scope, andxwill be local to the module.

Specifications

Specification
ECMAScript Language Specification
#sec-function-objects

Browser compatibility

BCD tables only load in the browser

See also