Function
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
* Some parts of this feature may have varying levels of support.
TheFunction object provides methods forfunctions. In JavaScript, every function is actually aFunction object.
In this article
Constructor
Function()Creates a new
Functionobject. 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.prototype and shared by allFunction instances.
Function.prototype.argumentsDeprecatedNon-standardRepresents the arguments passed to this function. Forstrict, arrow, async, and generator functions, accessing the
argumentsproperty throws aTypeError. Use theargumentsobject inside function closures instead.Function.prototype.callerDeprecatedNon-standardRepresents the function that invoked this function. Forstrict, arrow, async, and generator functions, accessing the
callerproperty throws aTypeError.Function.prototype.constructorThe constructor function that created the instance object. For
Functioninstances, the initial value is theFunctionconstructor.
These properties are own properties of eachFunction instance.
displayNameNon-standardOptionalThe display name of the function.
lengthSpecifies the number of arguments expected by the function.
nameThe name of the function.
prototypeUsed when the function is used as a constructor with the
newoperator. It will become the new object's prototype.
Instance methods
Function.prototype.apply()Calls a function with a given
thisvalue and optional arguments provided as an array (or anarray-like object).Function.prototype.bind()Creates a new function that, when called, has its
thiskeyword 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
thisvalue and optional arguments.Function.prototype.toString()Returns a string representing the source code of the function.Overrides the
Object.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 the
instanceofoperator.
Examples
>Difference between Function constructor and function declaration
Functions created with theFunction 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 theFunction constructor was created. This is different from usingeval() 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()); // 10const f2 = createFunction2();console.log(f2()); // 20While this code works in web browsers,f1() will produce aReferenceError in Node.js, asx will not be found. This is because the top-level scope in Node is not the global scope, andx will be local to the module.
Specifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-function-objects> |