Функції як дані
синтаксичні конструкції, а й дані, а це означає, що вони можуть прі_ привласнювати змінним, зберігатися у властивостях об'єктів або елементах массі_ вов, передаватися як аргументи функціями і т. д. 1
Це визначення створює новий об'єкт функції і привласнює його змінної square. Ім'я функції дійсно нематеріальне - це просто ім'я перемен_ ної, що містить функцію. Функція може бути присвоєна інший перемен_ ної, і при цьому працювати так само, як і раніше:
var a = square (4); // a містить
тепер посилається на ту ж функцію, що і square
Функції можуть бути також присвоєні не тільки глобальним змінним, але і властивостями об'єктів. В цьому випадку їх називають методами:
var o = new Object;
o.square = function (x)
У функцій навіть не обов'язково повинні бути імена, наприклад в разі прі_ сваіваніі їх елементам масиву:
var a = new Array (3);
a [2] = a [0] (a [1]); // a [2] містить 400
Приклад 8.2. Використання функцій як даних
// Тут визначаються кілька простих функцій function add (x, y)
// Ця функція приймає одну з вищенаведених функцій
// як аргумент і викликає її для двох операндів
1 Це може здатися не настільки цікавим, якщо ви не знайомі з такими язика_ ми, як Java, в яких функції є частиною програми, але не можуть про_ грамою управлятися.
150 Глава 8. Функції
function operate (operator, operand1, operand2)
return operator (operand1, operand2);
// Ось так можна викликати цю функцію для обчислення значення виразу (2 + 3) + (4 * 5): var i = operate (add, operate (add, 2, 3), operate (multiply, 4, 5));
// Заради прикладу, ми реалізуємо ці функції знову, на цей раз за допомогою
// функціональних литералов всередині литерала об'єкта.