---
hide_title: false
hide_table_of_contents: false
pagination_next: null
pagination_prev: null
---
# Function.prototype.toString()

The **`toString()`** method returns a string representing the source code of the specified `Function`.

## Syntax

```js
toString()
```

### Return value

A string representing the source code of the function.

## Description

The `Function` object overrides the `toString()` method
inherited from `Object`; it does not inherit
[`Object.prototype.toString()`](../../../globals/Object/prototype/toString.mdx). For user-defined `Function`
objects, the `toString` method returns a string containing the source text
segment which was used to define the function.

JavaScript calls the `toString` method automatically when a
`Function` is to be represented as a text value, e.g. when a function is
concatenated with a string.

The `toString()` method will throw a [`TypeError`](../../../globals/TypeError/TypeError.mdx) exception
("Function.prototype.toString called on incompatible object"), if its
`this` value object is not a `Function` object.

```js example-bad
Function.prototype.toString.call('foo'); // throws TypeError
```

If the `toString()` method is called on built-in function objects, a
function created by [`Function.prototype.bind()`](../../../globals/Function/prototype/bind.mdx), or
other non-JavaScript functions, then `toString()` returns a
_native function string_ which looks like

```js
"function someName() { [native code] }"
```

For intrinsic object methods and functions, `someName` is the initial name of the function; otherwise its content may be implementation-defined, but will always be in property name syntax, like `[1 + 1]`, `someName`, or `1`.

> **Note:** This means using [`eval()`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/eval) on native function strings is a guaranteed syntax error.

If the `toString()` method is called on a function created by the `Function` constructor, `toString()` returns the source code of a synthesized function declaration named "anonymous" using the provided parameters and function body. For example, `Function("a", "b", "return a + b").toString()` will return:

```js
"function anonymous(a,b\n) {\nreturn a + b\n}"
```

Since ES2018, the spec requires the return value of `toString()` to be the exact same source code as it was declared, including any whitespace and/or comments — or, if the host doesn't have the source code available for some reason, requires returning a native function string. Support for this revised behavior can be found in the [browser compatibility table](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/toString#browser_compatibility).
