This page was translated from English by the community.Learn more and join the MDN Web Docs community.
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.
In this article
Конструктор
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 с функциями-выражениями.
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()); // 10var f2 = createFunction2();console.log(f2()); // 20Хотя этот код работает в браузерах, в окружении Node.js вызовf1() приведёт к ошибкеReferenceError, потому чтоx не будет найден. Это происходит из-за того, что область видимости верхнего уровня в Node не является глобальной областью видимости, поэтомуx ссылается на локальную переменную в пределах текущего модуля.
Спецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-function-objects> |
Совместимость с браузерами
Смотрите также
- Функции и их область видимости
- Инструкция
function - Выражение
function - Инструкция
function* - Выражение
function* AsyncFunctionGeneratorFunction