Объект Function в JavaScript

Все функции в программе являются выполняемыми объектами и наследниками класса Function. Конструктор Function позволяет создать функцию в общем потоке скрипта (Function Expression). В качестве аргументов конструктору передаются строки, содержащие список локальных переменных и тело функции. Тело функции указывается последним аргументом. Локальные переменные можно указать одной строкой или по отдельности. Порядок их следования сохраняется при создании функции.

func = new Function('arg1', 'arg2', '/* тело функции */');
func = new Function('arg1, arg2', '/* тело функции */');
/* эти форматы равноценны следующей записи */
func = function(arg1, arg2) {
  /* тело функции */
};

Вне зависимости от того, где происходит вызов конструктора, JavaScript считает, что функция создаётся в глобальной области видимости (будто конструктор Function создаёт метод глобального объекта, хотя это не так). Поэтому такая функция получит доступ только к своим локальным переменным и глобальным переменным.

function outer() {
  var a = 2;
  var inner = new Function('', 'alert(a);');
  inner();
}

var a = 1;
outer(); // 1
alert('inner' in window); // false

Объект Function не имеет своих собственных свойств и методов, но к нему применимы свойства и методы из его прототипа.

Свойства наследников Function

constructor

Свойство constructor наследуется из класса Object.

function fake() {}

alert(fake.constructor); /* 'function Function() {[native code]}' */

length

Свойство length определяет количество аргументов, которые ожидаются функцией.

function fake(a, b, c, d) {}

alert(fake.length); // 4

Методы наследников Function

toString()

Метод toString() наследуется из класса Object.

var sum = new Function('a, b', 'return (a + b);');
alert(sum);
/* в переменной sum "анонимная" функция
function anonymous(a, b) {
return (a + b);
}
*/