Книга: JavaScript. Подробное руководство, 6-е издание
8.7.6. Конструктор Function()
8.7.6. Конструктор Function()
Функции обычно определяются с помощью ключевого слова function
либо в форме инструкции объявления функции, либо в форме выражения-литерала. Однако функции могут также определяться с помощью конструктора Function().
Например:
var f = new Function("x", "у", "return x*y;");
Эта строка создаст новую функцию, которая более или менее эквивалентна функции, объявленной с помощью более привычного синтаксиса:
var f = function(x, у) { return х*у; }
Конструктор Function()
принимает произвольное число строковых аргументов. Последний аргумент должен содержать текст с телом функции; он может включать произвольное число инструкций на языке JavaScript, разделенных точкой с запятой. Все остальные аргументы конструктора интерпретируются как имена параметров функции. Чтобы создать функцию, не имеющую аргументов, достаточно передать конструктору всего одну строку - тело функции.
Примечательно, что конструктору Function()
не передается никаких аргументов, определяющих имя создаваемой функции. Подобно литералам функций, конструктор Function()
создает анонимные функции.
Есть несколько моментов, связанных с конструктором Function(),
о которых следует упомянуть особо:
• Конструктор Function()
позволяет динамически создавать и компилировать функции в процессе выполнения программы.
• При каждом вызове конструктор Function()
выполняет синтаксический анализ тела функции и создает новый объект функции. Если вызов конструктора производится в теле цикла или часто вызываемой функции, это может отрицательно сказаться на производительности программы. Напротив, вложенные функции и выражения определения функций внутри циклов не компилируются повторно.
• И последний, очень важный момент: когда функция создается с помощью конструктора Function(),
не учитывается лексическая область видимости - функции всегда компилируются как глобальные функции, что наглядно демонстрирует следующий фрагмент:
var scope = "глобальная";
function constructFunction() {
var scope = "локальная";
return new Function("return scope”); // Здесь не используется
// локальная область видимости!
} ;
// Следующая строка вернет "глобальная", потому что функция, возвращаемая
// конструктором Function(), является глобальной.
constructFunction()(); // => "глобальная"
Точнее всего конструктор Function()
соответствует глобальной версии eval()
(раздел 4.12.2), которая определяет новые переменные и функции в своей собственной области видимости. Вам редко придется использовать этот конструктор в своих программах.
- 9.5.3. Имя конструктора
- 8.7. Свойства и методы функций и конструктор Function
- 9.7.2. Вызов конструктора и методов базового класса
- EXTERNAL FUNCTION DIRECTORY
- Часть III Конструктор речевых модулей для скриптов и стандартов продаж Изменения в продажах и требования к речевым модул...
- Перегрузка конструкторов
- CHAPTER 4 Functions and Libraries in mikroC
- Конструктор Employee
- Работа с конструктором запросов
- Functions
- Basic Functions
- Using Functions in Shell Scripts