CSS властивості
ГлавнаяJavaScriptФункції JavaScript

Функції JavaScript

185

Функції є одним із найпотужніших і найважливіших понять у програмуванні.

Функції на кшталт математичних виконують перетворення, вони приймають вхідні значення, які називаються аргументами і повертає вихідне значення.

Оголошення функцій

Функції подібно до змінних повинні бути оголошені. Давайте зробимо це з функцією double, яка набуває аргументу з ім'ям х і повертає подвоєний х:

<code data-language="javascript">function double( x) {return 2*x; }

До функції вище можна звертатися до її оголошення.

У JavaScript функції це також і змінні; вони можуть зберігатися в змінних (подібно до числах, рядків та ін.) і передаватися в інші функції як аргументи:

<code data-language="javascript">var double=function(x) { return 2 * x; };

До функції вище не можна звертатися до її оголошення, як і до будь-якої іншої змінної.

Функції вищого порядку

Функції вищого ладу є функціями, які керують іншими функціями. Наприклад, функція може приймати інші функції як аргументи і/або задавати функцію як значення, що повертається. Подібні незвичайні функціональні методи є потужними конструкціями, доступними вам у JavaScript та інших мовах високого рівня, таких як Python, Lisp та ін. Тепер ми створимо дві прості функції add_2 та double, а також функцію вищого порядку з ім'ям map. Функція map прийматиме два аргументи: func і list (тому функція оголошується як map(func,list)) та повертати масив. func (перший аргумент) буде функцією, яка застосовується до кожного елемента в масиві list (другий аргумент).

<code data-language="javascript">//Визначаємо дві прості функції var add_2=function(x) { return x + 2; }; var double=function(x) { return 2 * x; }; //map це класна функція, яка набуває двох аргументів: //func функція для виклику //list масив значень для виклику з func var map=function(func, list) { var output=[]; //Вихідний список for(idx in list) { output.push( func(list[idx])); } 
return output; } 
//Ми використовуємо map, щоб застосувати функцію до всього списку //входить до map, а потім отримати відповідний вихідний список map(add_2, [5,6,7]) //=> [7, 8, 9] map(double, [5,6,7]) //=> [10, 12, 14]

Функції у наведеному вище прикладі прості. Однак, коли вони передаються як аргументи в інші функції, вони можуть брати участь у створенні більш складних функцій.

Приміром, якщо ми помічаємо, що використовуємо звернення до map (add_2, ...) і map(double, ...) у нашому коді занадто часто, то можемо вирішити створити дві спеціалізовані функції для обробки списків, які виконують бажані операції. Використовувати складові функції можна так:

<code data-language="javascript">process_add_2=function(list) { return map(add_2, list); } 
process_double=function(list) { return map(double, list); } 
process_add_2([5,6,7]) //=> [7, 8, 9] process_double([5,6,7]) //=> [10, 12, 14]

Тепер створимо функцію з ім'ям buildProcessor, яка бере функцію func як вхідні дані та повертає process_func — функцію, яка застосовує func до кожного елемента списку.

<code data-language="javascript">//функція генерує обробку списку var buildProcessor=function(func) { var process_func=function(list) { return map(func, list); } 
return process_func; } 
//buildProcessor повертає функцію, яка викликалася разом зі списком //Через buildProcessor ми можемо генерувати обробники списку add_2 та double наступним чином: process_add_2=buildProcessor(add_2); process_double=buildProcessor(double); process_add_2([5,6,7]) //=> [7, 8, 9] process_double([5,6,7]) //=> [10, 12, 14]

Давайте поглянемо на інший приклад. Ми створимо функцію з ім'ям buildMultiplier яка бере число х як вхідний параметр і повертає функцію, яка множить свій аргумент на х:

<code data-language="javascript">var buildMultiplier=function(x) { return function(y) { return x * y; } 
} 
var double=buildMultiplier(2); var triple=buildMultiplier(3); double(3); //=> 6 triple(3); //=> 9