Функция
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Объект Function предоставляет методы для функций. В JavaScript каждая функция фактически является объектом Function.
Конструктор
-
Function() - Создает новый объект
Function. Прямой вызов конструктора может динамически создавать функции, но страдает от проблем с безопасностью и схожих (но гораздо менее значительных) проблем с производительностью, как уeval(). Однако, в отличие отeval(), конструкторFunctionсоздает функции, которые выполняются только в глобальной области видимости.
Свойства экземпляра
Эти свойства определены для Function.prototype и разделяются всеми экземплярами Function.
-
Function.prototype.argumentsУстарело Нестандартно - Представляет аргументы, переданные этой функции. Для строгого режима, стрелочных, асинхронных и генераторных функций доступ к свойству
argumentsвызываетTypeError. Вместо этого используйте объектargumentsвнутри замыканий функций. -
Function.prototype.callerУстарело Нестандартно - Представляет функцию, которая вызвала эту функцию. Для строгого режима, стрелочных, асинхронных и генераторных функций доступ к свойству
callerвызываетTypeError. -
Function.prototype.constructor - Конструктор, который создал объект экземпляра. Для экземпляров
Functionначальным значением является конструкторFunction.
Эти свойства являются собственными свойствами каждого экземпляра Function.
-
displayNameНестандартно Необязательно - Отображаемое имя функции.
-
length - Указывает количество аргументов, ожидаемых функцией.
-
name - Имя функции.
-
prototype - Используется, когда функция используется как конструктор с оператором
new. Он станет прототипом нового объекта.
Методы экземпляра
-
Function.prototype.apply() - Вызывает функцию с заданным значением
thisи необязательными аргументами, предоставленными в виде массива (или массивоподобного объекта). -
Function.prototype.bind() - Создает новую функцию, которая при вызове имеет свое ключевое слово
this, установленное в предоставленное значение, опционально с заданной последовательностью аргументов, предшествующих любым предоставленным при вызове новой функции. -
Function.prototype.call() - Вызывает функцию с заданным значением
thisи необязательными аргументами. -
Function.prototype.toString() - Возвращает строку, представляющую исходный код функции. Переопределяет метод
Object.prototype.toString. -
Function.prototype[Symbol.hasInstance]() - Определяет процедуру по умолчанию для определения того, распознает ли функция-конструктор объект как один из экземпляров конструктора. Вызывается оператором
instanceof.
Примеры
Разница между конструктором Function и объявлением функции
Функции, созданные с помощью конструктора Function, не создают замыканий к своим контекстам создания; они всегда создаются в глобальной области видимости. При их выполнении они смогут получить доступ только к своим собственным локальным переменным и глобальным, но не к переменным из области видимости, в которой был создан конструктор Function. Это отличается от использования eval() с кодом для выражения функции.
// 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()); // 10
const f2 = createFunction2();
console.log(f2()); // 20
Хотя этот код работает в веб-браузерах, f1() вызовет ReferenceError в Node.js, так как x не будет найден. Это связано с тем, что верхний уровень области видимости в Node не является глобальной областью видимости, и x будет локальным для модуля.
Спецификации
Совместимость с браузерами
| Десктоп | Мобильные | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
Function |
1 |
12 |
1 |
3 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
@@hasInstance |
50 |
15 |
50 |
37 |
10 |
50 |
50 |
37 |
10 |
5.0 |
50 |
10 |
1.0.0 |
1.0 |
6.5.0 |
Function |
1 |
12 |
1 |
3 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
apply |
1 |
12 |
1 |
4 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
arguments |
1 |
12 |
1 |
3 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
bind |
7 |
12 |
4 |
11.6 |
5.1 |
18 |
4 |
12 |
6 |
1.0 |
4.4 |
6 |
1.0.0 |
1.0 |
0.10.0 |
call |
1 |
12 |
1 |
4 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0При вызове этого методаthisArg по умолчанию не является глобальным объектом. |
caller |
1 |
12 |
1 |
9.6 |
3 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
displayName |
Нет |
Нет |
13 |
Нет |
Нет |
Нет |
14 |
Нет |
Нет |
Нет |
Нет |
Нет |
? |
Нет |
Нет |
length |
1 |
12 |
1 |
3 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
name |
15 |
14 |
1 |
10.5 |
6 |
18 |
4 |
11 |
6 |
1.0 |
4.4 |
6 |
1.0.0 |
1.0 |
0.10.0 |
toString |
1 |
12 |
1 |
3 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function