Function-объекты, созданные конструктором Function, вычисляются каждый раз при их использовании. Это менее эффективно, чем объявление функции и вызов её внутри Вашего кода, поскольку объявленные функции компилируются.
Чтобы возвращать значение, функция обязана иметь оператор return, который специфицирует возвращаемое значение.
Все параметры передаются функции по значению; значение передаётся функции, но если функция изменяет значение параметра, это изменение не отражается глобально или в вызывающей функции. Однако, если Вы передаёте функции объект в качестве параметра и функция изменяет свойства объекта, эти изменения видны вне функции, как показано в следующем примере:
function myFunc(theObject) {Ключевое слово this не ссылается на выполняемую в данный момент функцию, поэтому Вы обязаны обращаться к Function-объектам по имени, даже в теле функции.
Доступ к аргументам функции через массив arguments. Вы можете обращаться в функции к аргументам функции, используя массив arguments. См. arguments.
Специфицирование аргументов в конструкторе Function. Следующий код создаёт Function-объект, принимающий два аргумента:
var multiply = new Function("x", "y", "return x * y")Аргументы "x" и "y" являются формальными именами аргументов, которые используются в теле функции, "return x * y".
Предыдущий код присваивает функцию переменной multiply. Для вызова Function-объекта Вы можете специфицировать имя переменной, как если бы она была функцией, как показано далее в примерах:
var theAnswer = multiply(7,6) var myAge = 50Присвоение функции переменной конструктором Function. Предположим, Вы создаёте переменную multiply с использованием конструктора Function, как показано в предыдущем разделе:
var multiply = new Function("x", "y", "return x * y")Это похоже на следующее объявление функции:
function multiply(x,y) {Присвоение функции переменной с использованием конструктора Function похоже на объявление функции оператором function, но имеются и отличия:
Вложение функций. Вы можете вкладывать функции друг в друга. Вложенная функция (внутренняя) является private для содержащей её (внешней) функции:
Следующий пример демонстрирует вложение функций:
function addSquares (a,b) {Если функция содержит вложенную функцию, Вы можете вызывать внешнюю функцию и специфицировать аргументы для внешней и внутренней функции:
function outside(x) {Специфицирование обработчика события объектом Function. Следующий код присваивает функцию обработчику onFocus (имя обработчика обязано записываться в нижнем регистре):
window.onfocus = new Function("document.bgColor='antiquewhite'")Если функция присваивается переменной, Вы можете присвоить переменную обработчику события. Следующий код присваивает функцию переменной setBGColor.
var setBGColor = new Function("document.bgColor='antiquewhite'")Вы можете использовать эту переменную для присвоения функции обработчику события одним из следующих способов:
document.form1.colorButton.onclick=setBGColor <INPUT NAME="colorButton" TYPE="button"После того как Вы получили ссылку на Function-объект, Вы можете использовать его как функцию, и он будет конвертирован из объекта в функцию:
window.onfocus()Обработчики событий не принимают аргументов, поэтому Вы не можете объявлять никакие аргументы в конструкторе Function для обработчика события. Например, Вы не можете вызывать функцию multiply через такую установку свойства onclick кнопки:
document.form1.button1.onclick=multFun(5,10)