Клиентский JavaScript. Справочник

         

Описание


Function-объекты, созданные конструктором Function, вычисляются каждый раз при их использовании. Это менее эффективно, чем объявление функции и вызов её внутри Вашего кода, поскольку объявленные функции компилируются.

Чтобы возвращать значение, функция обязана иметь оператор return, который специфицирует возвращаемое значение.

Все параметры передаются функции по значению; значение передаётся функции, но если функция изменяет значение параметра, это изменение не отражается глобально или в вызывающей функции. Однако, если Вы передаёте функции объект в качестве параметра и функция изменяет свойства объекта, эти изменения видны вне функции, как показано в следующем примере:

function myFunc(theObject) {
theObject.make="Toyota"
}

mycar = {make:"Honda", model:"Accord", year:1998}
x=mycar.make     // возвращает Honda
myFunc(mycar)    // передаёт объект mycar функции
y=mycar.make     // возвращает Toyota (prop было изменено функцией)

Ключевое слово 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
if (myAge >=39) {myAge=multiply (myAge,.5)}



Присвоение функции переменной конструктором Function.
Предположим, Вы создаёте переменную multiply с использованием конструктора Function, как показано в предыдущем разделе:

var multiply = new Function("x", "y", "return x * y")

Это похоже на следующее объявление функции:

function multiply(x,y) {
   return x*y
}

Присвоение функции переменной с использованием конструктора Function похоже на объявление функции оператором function, но имеются и отличия:

  • Когда Вы присваиваете функцию переменной с использованием var multiply = new Function("..."), multiply является переменной, для которой текущее значение является ссылкой на функцию, созданную как new Function().
  • Когда Вы создаёте функцию с использованием function multiply() {...}, multiply является не переменной, а именем функции.

Вложение функций. Вы можете вкладывать функции друг в друга. Вложенная функция (внутренняя) является private для содержащей её (внешней) функции:

  • Доступ к внутренней функции может быть получен только через операторы внешней функции.
  • Внутренняя функция может использовать аргументы и переменные внешней функции. Внешняя функция не может использовать аргументы и переменные внутренней функции.

Следующий пример демонстрирует вложение функций:

function addSquares (a,b) {
   function square(x) {
      return x*x
   }
   return square(a) + square(b)
}
a=addSquares(2,3) // возвращает 13
b=addSquares(3,4) // возвращает 25
c=addSquares(4,5) // возвращает 41

Если функция содержит вложенную функцию, Вы можете вызывать внешнюю функцию и специфицировать аргументы для внешней и внутренней функции:

function outside(x) {
   function inside(y) {
      return x+y
   }
   return inside
}
result=outside(3)(5) // возвращает 8

Специфицирование обработчика события объектом 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"
   VALUE="Change background color"
   onClick="setBGColor()">

После того как Вы получили ссылку на Function-объект, Вы можете использовать его как функцию, и он будет конвертирован из объекта в функцию:

window.onfocus()

Обработчики событий не принимают аргументов, поэтому Вы не можете объявлять никакие аргументы в конструкторе Function для обработчика события. Например, Вы не можете вызывать функцию multiply через такую установку свойства onclick кнопки:

document.form1.button1.onclick=multFun(5,10)



Содержание раздела