1. Веб-технологии для разработчиков
  2. JavaScript
  3. Справочник по JavaScript
  4. Стандартные встроенные объекты
  5. Function

This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

Function

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨июль 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® 2026 Language Specification
# sec-function-objects

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

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

Help improve MDN

Learn how to contribute

This page was last modified on by MDN contributors.

AltStyle によって変換されたページ (->オリジナル) /