Тут народ розповість про різні корисних, але неочевидних прийомах написання функцій.
Як створити необов'язкові параметри функції?
Є функції, деякі параметри яких дуже часто приймають одні і ті ж значення. Чи не можна зробити ці параметри необов'язковими, щоб при виконанні функції їх можна було пропускати, і при цьому вони самі брали б потрібні значення?
Якщо при виконанні функції будь-якої з її параметрів був пропущений, в коді гела функції йому буде присвоєно значення undefined. Так що послідовність дій ясна.
Перевіряємо, чи має цей параметр значення undefined (т. Е. Був він переданий функції явно). Якщо так, переходимо до кроку 2, якщо ні до кроку 3.
Надаємо параметру значення за замовчуванням.
Використовуємо значення цього параметра в обчисленнях всередині тіла функції.
function func1 (par1, par2)
if (typeof (par2) == "undefined") par2 = 0;
> Ми можемо викликати цю функцію як із зазначенням всіх параметрів:
так і з зазначенням тільки першого - обов'язкового - параметра:
В останньому випадку другий параметр отримає в тілі функції значення 0. Ефект буде той же, якби ми викликали функцію з такими параметрами:
Вираз перевірки параметра на значення undefined в тілі функції можна записати коротше. Ось так:
function func1 (par1, par2)
if (! par2) par2 = 0;>
Значення undefined, будучи складовою частиною логічного виразу, завжди перетворюється в значення false. У наведеному вище прикладі ми це і використовували.
Необов'язкові параметри повинні знаходитися в самому кінці списку параметрів функції (див. Наведені раніше приклади). Якщо ж ми, наприклад, зробимо необов'язковим перший параметр функції і викличемо її таким чином:
Як передати функції довільне число параметрів?
Потрібно написати функцію, яка приймає довільне число параметрів. Як це зробити?
Усередині тіла функції доступний масив arguments, елементи якого містять всі передані функції параметри. Цей масив має властивість length, яке повертає кількість елементів масиву.
var з = arguments.length;
for (i = 0; i
var str = func2 ( "Java", "Script");
Ще одна функція, яка приймає будь-яку кількість строкових параметрів і повертає рядок, складений з їх значень. Але на цей раз першим, обов'язковим, параметром вона приймає символ-роздільник, який буде міститися між цими рядками.
var з = arguments.length;
for (i = 1; i
var str = func3 ( "+", "Java", "Script");
помістить в змінну str рядок "Java + Script".
Зрештою, можна передати у функцію як параметр масив з потрібною кількістю елементів.
Трохи змінений приклад функції func3:
function func3 (pDelimiter, pars)
var з = pars.length;
for (i = 0; i
Викликатися ця функція буде так:
var str = func3 ( "", new Array ( "Java", "Script"));
після чого в змінної str виявиться рядок "Java Script".
Повернення з функції декількох значень Проблема
1. Обчислюємо в тілі функції всі потрібні значення.
2. Створюємо в тілі функції масив.
3. Розміщуємо обчислені значення в елементи цього масиву.
4. Повертаємо отриманий масив оператором return.
А вже витягти значення елементів масиву, повернутого функцією, ніяких труднощів не складе.
// Тут поміщаються вирази, що обчислюють потрібні значення.
// Припустимо, що все їх. три, і вони поміщаються в змінні
// valuel, value2 і value3.
var arr = new Array ();
Використання цієї функції:
var a = someFunc (); var vl = a [0]; var v2 = a [1]; var v3 = a [2];
Замість звичайних масивів з числовими індексами ми можемо використовувати хеша - масиви із строковими індексами елементів. наприклад:
// Тут поміщаються вирази, що обчислюють потрібні значення
// valuel, value2 і value3.
var arr = new Array ();
return arr;> var a = someFunc (); var v1 = a [ "valuel"]; var v2 = a [ "value2"]; var v3 = a [ "value3"];