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.

На самом деле каждая JavaScript-функция является объектом Function. Это легко проверить, выполнив проверку (function(){}).constructor === Function, которая вернёт true.

Конструктор

Function()

Создаёт новый объект Function. Вызов конструктора напрямую позволяет создавать функции программным путём. Такой способ представляет угрозу для безопасности, а также несёт разные (хотя не такие значительные) проблемы с производительностью при использовании с Global_Objects/eval. Однако в отличие от eval, конструктор Function создаёт функции, выполняемые только в глобальной области видимости.

Свойства экземпляра

Function.prototype.arguments

Массив с переданными функции аргументами. Это устаревшее свойство объекта Function. Вместо него используйте объект arguments (доступный внутри функции).

Function.prototype.caller

Содержит функцию, которая вызвала текущую выполняющуюся функцию. Это устаревшее свойство, которое работает только в функциях без включённого строгого режима.

Function.prototype.displayName

Отображаемое имя функции.

Function.prototype.length

Содержит количество аргументов в функции.

Function.prototype.name

Имя функции.

Методы экземпляра

Function.prototype.apply(thisArg [, argsArray])

Вызывает функцию и устанавливает её this на переданный thisArg. Аргументы могут быть переданы в виде объекта Array.

Function.prototype.bind(thisArg[, arg1[, arg2[, ...argN]]])

Создает новую функцию, при вызове которой её this будет установлен на thisArg. Можно также указать ряд аргументов, которые будут добавлены к аргументам при вызове новой привязанной функции.

Function.prototype.call(thisArg[, arg1, arg2, ...argN])

Вызывает функцию и устанавливает её this на переданное значение. Аргументы могут быть переданы как есть.

Function.prototype.toString()

Возвращает строку с исходным кодом функции. Переопределяет метод Object.prototype.toString.

Примеры

Сравнение конструктора Function и объявления функции

Функции, созданные через конструктор Function, не имеют доступа к собственному контексту исполнения, т.е. они всегда создаются в глобальной области видимости. При выполнении таких функций, они смогут обращаться только к своим локальным и глобальным переменным, но не к переменным в той области видимости, в которой вызывался конструктор Function. В этом они отличаются от использования Global_Objects/eval с функциями-выражениями.

js
var x = 10;

function createFunction1() {
  var x = 20;
  return new Function("return x;"); // здесь |x| ссылается на глобальный |x|
}

function createFunction2() {
  var x = 20;
  function f() {
    return x; // здесь |x| ссылается на локальный |x| выше
  }
  return f;
}

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

Хотя этот код работает в браузерах, в окружении Node.js вызов f1() приведёт к ошибке ReferenceError, потому что x не будет найден. Это происходит из-за того, что область видимости верхнего уровня в Node не является глобальной областью видимости, поэтому x ссылается на локальную переменную в пределах текущего модуля.

Спецификации

Specification
ECMAScript® 2025 Language Specification
# sec-function-objects

Совместимость с браузерами

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
Function
[Symbol.hasInstance]
Function() constructor
apply
ES 5.1: generic array-like object as arguments
arguments
DeprecatedNon-standard
bind
call
caller
DeprecatedNon-standard
displayName
Non-standard
length
Configurable: true
name
Configurable: true
Inferred names on anonymous functions
toString
Implements Function.prototype.toString revision

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
No support
No support
Non-standard. Check cross-browser support before using.
Deprecated. Not for use in new websites.
See implementation notes.
Has more compatibility info.

Смотрите также