Функції як дані

синтаксичні конструкції, а й дані, а це означає, що вони можуть прі_ привласнювати змінним, зберігатися у властивостях об'єктів або елементах массі_ вов, передаватися як аргументи функціями і т. д. 1

Це визначення створює новий об'єкт функції і привласнює його змінної square. Ім'я функції дійсно нематеріальне - це просто ім'я перемен_ ної, що містить функцію. Функція може бути присвоєна інший перемен_ ної, і при цьому працювати так само, як і раніше:

var a = square (4); // a містить

тепер посилається на ту ж функцію, що і square

Функції можуть бути також присвоєні не тільки глобальним змінним, але і властивостями об'єктів. В цьому випадку їх називають методами:

var o = new Object;

o.square = function (x) ; // функціональний літерал y = o.square (16); // y одно 256

У функцій навіть не обов'язково повинні бути імена, наприклад в разі прі_ сваіваніі їх елементам масиву:

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));

// Заради прикладу, ми реалізуємо ці функції знову, на цей раз за допомогою

// функціональних литералов всередині литерала об'єкта.