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 с функциями-выражениями.
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>  | 
            
Совместимость с браузерами
Loading…
Смотрите также
- Функции и их область видимости
 - Инструкция 
function - Выражение 
function - Инструкция 
function* - Выражение 
function* AsyncFunctionGeneratorFunction