1. Вбудовані Javascript функції
У javascript досить багато функцій, вбудованих в синтаксис мови. Розглянемо одну з них.
eval (рядок)
Функція обчислює вираз в зазначеному рядку (як параметр); вираз має бути складено за правилами мови JavaScript і не містити тегів HTML:
eval("5 * 7 + 1 / 2")
Розглянемо приклад використання функції eval:
Приклад: Розглянути приклад роботи коду з функцією eval.
var y = 5; // значение у равно 5
var x = "if (y==5) y*2-3"; // значение х равно строке символов
var rezult = eval(x); // rezult равно 7
Завдання js4_1. В скрипті запитувати у користувача ввести в діалогове вікно введення математичний вираз, потім обчислити значення цього виразу і результат вивести в діалоговому вікні.
2. Призначені для користувача Javascript функції
Призначені для користувача функції перш за все необхідні в ситуації, коли в різних частинах програми необхідно виконувати одні і ті ж дії кілька разів. В такому випадку повторювані оператори оформляються у вигляді функції, до якої можна звертатися і викликати її виконання з різних частин програми.
У javascript передбачено два варіанти функцій: функції, які при їх викликy виконують якісь дії(наприклад, виводять повідомлення), і функції, які повертають значення(число, рядок, ...).
-
Функція в ролі процедури. Якщо функція виконує будь-які дії і не повертає значення:
Синтаксис оголошення (створення) функції:
function ім'я_функції(аргументи){
код;
}Важливо: Якщо аргументи у функції відсутні, то після імені функції ставляться порожні дужки :
function ім'я_функції(){
код;
}Виклик функції:
У javascript виклик функції в ролі процедури відбувається наступним чином:
ім'я_функції (аргументи); // з аргументами
ім'я_функції (); // без аргументiвПриклад: Створити функцію для виведення модального вікна зі словом hello. Здійснити виклик функції.
Рішення:
-
Створіть код і протестуйте його в браузері:
function sayHello()
{
alert("hello");
}
sayHello();
-
-
Якщо функція повертає значення:
Синтаксис оголошення:
function ім'я_функції(аргументи){
код;
return результат або вираз
}Важливо: У javascript - директива, яка завершує виконання функції і повертає значення
Виклик функції:
У javaScript виклик функції, що повертає значення, відбувається, наприклад, таким чином:
var a = ім'я_функції (аргументи);
alert(a); // 1-й спосiб
var b = a + a; // 2-й спосiб
Тобто значення потрібно або вивести на екран, або можна використовувати в подальших висловлюваннях.
Приклад: Розгляньте фрагмент коду та поясніть, що виконується в даному скрипті:
function sayHello()
{
alert("1");
return "привет!";
alert("2");
}
var a=sayHello();
alert(a);Рішення::
-
Розгляньте роботу функції:
function sayHello()
{
alert("1");// виконається
return "привет!";// завершуємо виконання функції
alert("2");// не виконається, тому що після return
}Пояснення: Як видно з прикладу, після функція дійсно завершує свою роботу. Тому оператор виконуватися вже не буде.
-
Проаналізуйте виклик функції:
var a=sayHello();
alert(a);Пояснення: Виклик функції відбувається через присвоювання. Виклик в даному прикладі можна також організувати так: ; , aле це не pекомендований варіант.
Важливо: Таким чином, директива вказує на значення, що повертається функції, яке буде передано змінній при наступній формі виклику:
змінна = ім'я_функції();
Важливо: може використовуватися без значення, щоб припинити виконання функції і вийти з неї:
function checkName() {
var name=prompt('введіть ім'я')
if (!name) {
return); // якщо ім'я не заповнено, то виходимо з функції
}Завдання js4_2. Доповніть код згідно із завданням: В змінну povtor привласнити результат виконання функції confirm , яка виводить фразу «Пройти заповнення ще раз?» І приймає відповідь користувача (ок або скасування).
Фрагмент коду:
function say() {
document.write("Ви тут?" + "<br/>");
} do {
say();
povtor = ...
} while (povtor);Завдання js4_3. Створити функцію без параметрів, яка обчислює різницю двох вводяться користувачем в діалогові вікна числа. Виконати завдання двома способами: 1) функція виводить повідомлення з результатом; 2) у функції виконується різниця, а повідомлення з результатом виводиться в основній програмі.
Приблизний фрагмент коду для одного із способів:
function raznost() {
var a = ...
var b = ...
...
}
... -
3. Javascript функції з параметрами (аргументами) і повернення значень
Розглянемо докладніше використання інструкції в функції javascript на двох прикладах. Крім того, розглянемо використання в Javascript функції з параметрами (аргументами).
-
Функція в якості процедури.
Функція в якості процедури повертає значення undefined, але виконує якісь дії:
Приклад: Створити скрипт, що виводить в модальне вікно повідомлення 'Привіт, ім'я', де ім'я передається з програми в якості аргументу функції
Рішення:
-
Оголосіть функцію sayHello. У дужках аргументів функції вкажіть аргумент з ім'ям userName:
function sayHello(userName)
{
...
}Пояснення: У прикладі функція має один аргумент, вказаний в дужках, тобто userName.
-
У коді функції за допомогою методу виводьте повідомлення разом із значенням аргумента функції:
function sayHello(userName)
{
alert("Привіт, " + userName);
} -
В основній програмі двічі викличте функцію з різними значеннями:
...
sayHello("Вася");
sayHello("Петя");Пояснення: Змінна userName прийме те значення, яке вказано в дужках при виконанні функції - «Вася» і «Петя». Значить, при першому виклику функція виведе в діалогове вікно Привіт, Вася, при другому - Привіт, Петя.
-
Протестуйте результат в браузері.
-
-
Функція в ролі функції (класичне оформлення).
Функція в класичному оформленні повертає конкретне значення.
Приклад: Написати функцію, яка приймає в якості аргументу ім'я користувача і повертає в програму повідомлення 'Привіт, ім'я'. В основній програмі виводити дане повідомлення методом .
Рішення:
-
Оголосіть функцію sayHello. У дужках аргументів функції вкажіть аргумент з ім'ям userName:
function sayHello(userName)
{
...
}Пояснення: У прикладі функція має один аргумент, вказаний в дужках, тобто userName.
-
У коді функції за допомогою директиви поверніть повідомлення разом із значенням аргументу функції:
function sayHello(userName)
{
return "Привіт, " + userName;
} -
В основній програмі створіть змінну і надайте їй значення виклику функції. Виведіть значення змінної методом alert() :
...
var a = sayHello("Вася");
alert(a); -
Протестуйте результат в браузері.
Важливо: Зверніть увагу на різницю між викликом функції без директиви return і з директивою: в першому випадку функція викликається як оператор, повертаючи значення undefined; у другому випадком функція викликається через присвоювання, або беручи участь в виразах (див. нижче)
Завдання js4_4. Що виведе на екран наступний код?
var a = 5, b = 10, c = 20, d = 7;
function Sum1() {
var result = a + b;
document.write("Sum1: " + result + "<br/>");
}
function Sum2(x1, x2) {
var result = x1 + x2;
document.write("Sum2: " + result);
}
Sum1();
Sum2(c, d);Завдання js4_5. Необхідно запросити у користувача ввести вік (метод prompt ()). Викликати функцію, яка виводить діалогове вікно з повідомленням 'Привіт, малюк!', Якщо вік менше 18, і 'Привіт, юначе!', Якщо вік більш дорівнює 18.
-
УСІ СПОСОБИ СТВОРЕННЯ ПРИЗНАЧЕНИХ ДЛЯ КОРИСТУВАЧА ФУНКЦІЙ
-
класичний синтаксис
function a1(x, y) {
return x + y;
} -
явне створення об'єкта
// обов'язковим є тільки останній аргумент - тіло функції
var a1 = new Function('x', 'y', 'return x + y');або
var a1 = new Function('return "hello"');
-
ще один варіант створення
var a1 = function(x, y) { return x + y; };
Вызов функций во всех случаях будет:
var a = a1(3, 4);
4. Використання виразів з функціями
Звичайне використання javascript функції:
function sum(arg1,arg2)
{
var a=arg1+arg2;
return a;
}
var b=sum(1,2);
alert(b);
Функція як складова частина виразу:
function sum(arg1,arg2)
{
var a=arg1+arg2;
return a;
}
var b=sum(1,2);
alert(b);
function add()
{
var c=1+sum(1,2);
return c;
}
var d=add();
alert(d);
Пояснення: У другій функції () використовується вираз, що посилається на першу функцію (, в 11-му рядку).
Завдання js4_6. Створити функцію, яка повертає найбільше з трьох чисел.
Аргументами функції є самі числа.
Фрагмент коду:
function findMax(a,b,c){
...
return ...
}
var max = ...
...
Інші варіанти використання виразів з функціями
(Тільки для функцій, які повертають результат):
Розглянемо приклади для функції:
function plRectangle(width, height){
var S = width * height;
return S
}
Варіанти виразів:
-
Виклик функції як частина виразу:
S3 = 0.5 * plRectangle(a, b);
-
Виклик функції в логічних виразах:
if (plRectangle(a, b) > plRectangle(c, d))
alert("Первый прямоугольник больше второго"); -
Виклик javascript функції як параметр іншої функції:
var х = "25рх";
var у = 12;
var S = plRectangle(parselnt(x), у);
Завдання js4_7. Використовуйте функцію для модернізації прикладу з закінченням слова про кількість ворон. Відкрийте файл з виконаним завданням про ворон. Необхідно викликати функцію з параметром - кількість ворон.
Завдання js4_8. Створіть функцію для розрахунку ступеня введеного числа.
Питання для самоконтролю:
-
Для чого використовуються функції?
-
Поясніть в чому різниця використання функції в ролі процедури і функції з класичним оформленням?
-
Опишіть синтаксис виклику функції в ролі процедури.
-
Опишіть синтаксис виклику функції з класичним оформленням.
-
Для чого служить директива ?
-
Що таке аргументи функції і де вони вказуються?
5. Область видимості змінних. Javascript глобальні та локальні змінні в функції
Область видимості змінної - область коду, в якому змінна доступна для використання.
-
Глобальні змінні
-
створюються на рівні сценарію і зберігаються до кінця сценарію;
-
оголошуються до опису javascript функції:
var a = 1;
function ...
... -
можуть бути причиною помилок які складно знаходяться;
-
-
Локальні змінні
-
створюються всередині фрагментів коду і не видно ззовні;
for (var i=1;i<5;i++){ // i - локальна
...
}
if (x<5) {
var a=5; // a - локальна
} -
явно оголошуються в тілі javascript функції;
function findA{
var a = 2*2 // a - локальна
} -
аргументи (параметри) функції - завжди локальні змінні;
-
краще використовувати локальні змінні, так як доступ до них більше контролюється.
-
Завдання js4_9. Доповніть код згідно із завданням:
Створити 2 змінні глобальної та локальної області видимості (тобто всередині функції ) з іменами: , .
Змінній привласнити текст "Привіт", а - "Мир".
function func() {
}
func();
ОБЛАСТЬ ВИДИМОСТІ ЗМІННИХ
Розглянемо конкретні приклади області видимості змінних в javascript при використанні глобальних і локальних змінних.
-
var S = 2; // Глобальна зміннa S
function plRectangle(width, height){
var S = width * height;
return S // Локальна зміннa S
}
z = plRectangle(2, 3);
alert(z);
alert(S);Приклад: Значення дорівнює 6, а значення залишилося рівним 2, тобто значенням глобальної змінної, визначеної у зовнішній програмі
-
function plRectangle(width, height)
{
var s = width * height; // аргументи завжди локальні
width = width + 10;
return s
}
width = 2;
height = 3;
z = plRectangle(width, height);
alert(z);
alert(width);Приклад: Значення дорівнює 6; значення змінної дорівнює 2, тобто залишилося без змін
-
var S = 2; // Глобальна змінна S
function plRectangle(width, height)
{
S = width * height;
// замінюємо глобальну змінну:
return S // S - глобальна змінна (тому що без визначення var)
}
var z = plRectangle(2, 3);
alert(z);
alert(S);Приклад: Значення і і рівні 6; - глобальна змінна
-
function Plrectangle(width, height){
S = width * height; // глобальна змінна
return S
}
z = Plrectangle(2, 3);
S=2; // змінюємо глобальну змінну
alert(z);
alert (S);Приклад: Значення дорівнює 6, а значення дорівнює 2, тобто значенню зміненої глобальної змінної, визначеної у зовнішній програмі
-
function plRectangle(width, height)
{
var S = width * height;
var x = 17;
return S
}
z = plRectangle(2,3);
alert(z);
alert(x); // не визначена у зовнішній програмі
alert(S); // не визначена у зовнішній програміПриклад: Значення дорівнює 6; змінна у зовнішній програмі не визначена; змінна у зовнішній програмі не визначена
Завдання js4_10. Що виведе на екран наступний код?
var variable = "Глобальна змінна";
function f() {
var variable = "Локальна змінна";
document.write(variable + "<br/>");
}
f();
document.write(variable);
6. Рекурсивна функція javascript
Важливо: В інформатиці та програмуванні, а, відповідно, і в javascript, рекурсія - це виклик функції з самої ж функції, тобто функція в функції
Бувають також непряма або складна рекурсія, коли функція викликається не безпосередньо з самої себе, а з вкладеною в неї функції: наприклад, функція викликає функцію , а функція - функцію . Кількість вкладених викликів функції або процедури називається глибиною рекурсії.
Рекурсія javascript розглянута нижче на прикладі зведення числа в ступінь.
Для початку розглянемо ітераційний варіант зведення в ступінь, тобто з використанням циклу:
Приклад: Використовуючи функцію, необхідно обчислювати зведення числа в ступінь. Виконати завдання, використовуючи цикл
Рішення:
var chislo,stepen;
function degree(chislo,stepen) {
for(var result = 1; stepen > 0; stepen--) {
result *= chislo;
}
return result;
}
document.write(degree(2,4)); // виводить 16
Тепер виконаємо зведення числа в ступінь через рекурсію:
var chislo,stepen;
function degree(chislo,stepen) {
if(stepen) {
return chislo*degree(chislo,stepen-1);
}
return 1;
}
document.write(degree(2,4)); // виводить 16
Завдання js4_11. Що виведе на екран наступний код?
function f(counter) {
counter--;
document.write(counter + "<br/>");
if (counter != 0)
f(counter);
;document.write(counter + "<br/>");
}
f(2);
Завдання js4_12. Обчислити факторіал числа з використанням рекурсії, беручи за зразок приклад обчислення факторіала ітераційним методом
Приклад: Обчислення факторіала числа ітераційним методом з використанням циклу:
Рішення:
var m = 2;
x = factorial(m);
document.write(x);
function factorial(n){
if(n <= 1) return 1;
rezult = 2; // result - змінна для результату
for(i = 3; i <= n; i++) {
rezult = rezult*i;
}
return result;
}