KEMBAR78
Coding for Future in Lutsk. JavaScript. Part 6 | PDF
Зовнішні і глобальні змінні
Функція може працювати зі змінними, оголошеними зовні:
var day = 'понеділок';
function showDay() {
alert( day ); // виведення зовнішньої змінної
day = 'вівторок'; // (1) зніна значення зовнішньої змінної
var message = 'Сьогодні ' + day;
alert( message );
}
alert( day ); // понеділок
showDay();
alert( day ); // вівторок, бо функція змінила значення змінної
Змінна, оголошена на рівні всього скрипта називається
глобальною
Параметри функції
Функції можна передавати параметри
(аргументи), з якими вона працюватиме.
function rectangle(a,b) {
var S = a*b;
var P = 2*(a+b);
alert ("Площа прямокутника = " + S);
alert ("Периметр прямокутника = " + P);
}
rectangle(2,3);
Аргументи по замовчуванню
У функції може бути будь-яка кількість аргументів. Якщо якийсь
аргумент при виклику функції не заданий, він буде рівним
undefined.
Приклад:
function rectangle(a,b) {
alert ( "a = " + a + ", b = " + b );
var S = a*b;
var P = 2*(a+b);
alert ("Площа прямокутника = " + S);
alert ("Периметр прямокутника = " + P);
}
rectangle(2);
Виведе спочатку “a = 2, b = undefined”, а потім “Площа
прямокутника = NaN”, “Периметр прямокутника = NaN”.
Завжди можна за своїм бажання задати значення аргументів по
замовчуванню. Наприклад:
function rectangle(a,b) {
alert ( "a = " + a + ", b = " + b );
if (b === undefined) {
b = a;
alert( "Будемо вважати, що маємо справу з квадратом" );
}
var S = a*b;
var P = 2*(a+b);
alert ("Площа прямокутника = " + S);
alert ("Периметр прямокутника = " + P);
}
rectangle(2);
Альтернативний спосіб (замість блоку if):
b = b || a;
“Зайві” аргументи ігноруються.
rectangle(2, 3, 4, "ще щось"); // все добре працює
Повернення значення. return
function getArea(a,b) {
return a*b;
}
function getPerimeter(a,b) {
return 2*(a+b);
}
var S = getArea(2,3);
alert( "S = " + S );
alert( "P = " + getPerimeter(2,3) );
Директив return може бути кілька
function showSign(number) {
if (number > 0) {
return "Плюс";
} else if (number < 0) {
return "Мінус";
} else {
return;
}
}
alert( showSign(1) ); // Плюс
alert( showSign(-1) ); // Мінус
alert( showSign(0) ); // undefined
Задача 22
Напишіть функцію, яка виводить текст “Я
вивчаю JavaScript” і викличте її.
Задача 23
Напишіть функцію, яка виводить текст “Я
вивчаю parameter”, де parameter має
вводитись як аргумент. Викличте її з
аргументом JavaScript.
Задача 24
Напишіть функцію min(a,b), яка повертає
менше з чисел a,b.
Приклад роботи:
min(2, 5) == 2
min(3, -1) == -1
min(1, 1) == 1
Задача 25
Напишіть функцію pow(x,n), яка повертає
x в степені n, тобто перемножує x на себе
n разів і повертає результат. Вважається,
що x і n – цілі додатні числа.
Створіть сторінку, яка питає x і n, а потім
виводить результат pow(x,n).
Розв’язок
function pow(x, n) {
var result = x;
for (var i = 1; i < n; i++) {
result *= x;
}
return result;
}
var x = prompt("x?", '');
var n = prompt("n?", '');
if (n <= 1) {
alert( 'Степінь ' + n + ' не підтримується, введіть ціле n >
1' );
} else {
alert( pow(x, n) );
}
Функціональні вирази.
Function Expression
Синтаксис:
var f = function(параметри) {
// тіло функції
};
Основна відмінність: функції, оголошені як
Function Declaration, створюються
інтерпретатором до виконання коду.
myFunction(); // 1
function myFunction() {
alert( 1 );
}
Функціональні вирази дозволяють застосувати
умовне оголошення функції, наприклад:
var age = prompt('Ваш вік?');
var sayHi;
if (age >= 18) {
sayHi = function() {
alert( 'Заходьте' );
}
} else {
sayHi = function() {
alert( 'До 18 не можна' );
}
}
sayHi();
Рекурсія
В тілі функції можна викликати інші функції, зокрема,
саму себе.
function power(base, exponent) {
if (exponent == 0)
return 1;
else
return base * power(base, exponent - 1);
}
alert(power(2, 3));
Задача 26
Напишіть функцію sumTo(n), яка для
даного n рахує суму чисел від 1 до n.
Задачу можна розв'язати трьома
способами:
1. Через цикл.
2. Через рекурсію.
3. Через формулу суми арифметичної
прогресії.
Розв'язки
1.
function sumTo(n) {
var sum = 0;
for (var i = 1; i <= n; i++) {
sum += i;
}
return sum;
}
2.
function sumTo(n) {
if (n == 1) return 1;
return n + sumTo(n - 1);
}
alert( sumTo(100) );
3.
function sumTo(n) {
return n * (n + 1) / 2;
}
Задача 27
Напишіть функцію для обчислення
факторіала числа.
n! = n*(n-1)*(n-2)*...*2*1.
Розв'язок
function factorial(n) {
return (n != 1) ? n *
factorial(n - 1) : 1;
}
alert( factorial(5) ); // 120
Задача 28
Послідовність чисел Фібоначчі визначається формулою
Fn = Fn-1 + Fn-2. Тобто наступне число є сумою двох
попередніх.
Перші два числа рівні 1, далі 2 (1+1), 3(1+2), 5(2+3) і так
далі: 1, 1, 2, 3, 5, 8, 13, 21....
Напишіть функцію fib(n), яка повертає n-е число
Фібоначчі. Приклад роботи:
function fib(n) { /* ваш код */ }
alert( fib(3) ); // 2
alert( fib(7) ); // 13
alert( fib(77)); // 5527939700884757

Coding for Future in Lutsk. JavaScript. Part 6

  • 1.
    Зовнішні і глобальнізмінні Функція може працювати зі змінними, оголошеними зовні: var day = 'понеділок'; function showDay() { alert( day ); // виведення зовнішньої змінної day = 'вівторок'; // (1) зніна значення зовнішньої змінної var message = 'Сьогодні ' + day; alert( message ); } alert( day ); // понеділок showDay(); alert( day ); // вівторок, бо функція змінила значення змінної Змінна, оголошена на рівні всього скрипта називається глобальною
  • 2.
    Параметри функції Функції можнапередавати параметри (аргументи), з якими вона працюватиме. function rectangle(a,b) { var S = a*b; var P = 2*(a+b); alert ("Площа прямокутника = " + S); alert ("Периметр прямокутника = " + P); } rectangle(2,3);
  • 3.
    Аргументи по замовчуванню Уфункції може бути будь-яка кількість аргументів. Якщо якийсь аргумент при виклику функції не заданий, він буде рівним undefined. Приклад: function rectangle(a,b) { alert ( "a = " + a + ", b = " + b ); var S = a*b; var P = 2*(a+b); alert ("Площа прямокутника = " + S); alert ("Периметр прямокутника = " + P); } rectangle(2); Виведе спочатку “a = 2, b = undefined”, а потім “Площа прямокутника = NaN”, “Периметр прямокутника = NaN”.
  • 4.
    Завжди можна засвоїм бажання задати значення аргументів по замовчуванню. Наприклад: function rectangle(a,b) { alert ( "a = " + a + ", b = " + b ); if (b === undefined) { b = a; alert( "Будемо вважати, що маємо справу з квадратом" ); } var S = a*b; var P = 2*(a+b); alert ("Площа прямокутника = " + S); alert ("Периметр прямокутника = " + P); } rectangle(2); Альтернативний спосіб (замість блоку if): b = b || a; “Зайві” аргументи ігноруються. rectangle(2, 3, 4, "ще щось"); // все добре працює
  • 5.
    Повернення значення. return functiongetArea(a,b) { return a*b; } function getPerimeter(a,b) { return 2*(a+b); } var S = getArea(2,3); alert( "S = " + S ); alert( "P = " + getPerimeter(2,3) );
  • 6.
    Директив return можебути кілька function showSign(number) { if (number > 0) { return "Плюс"; } else if (number < 0) { return "Мінус"; } else { return; } } alert( showSign(1) ); // Плюс alert( showSign(-1) ); // Мінус alert( showSign(0) ); // undefined
  • 7.
    Задача 22 Напишіть функцію,яка виводить текст “Я вивчаю JavaScript” і викличте її. Задача 23 Напишіть функцію, яка виводить текст “Я вивчаю parameter”, де parameter має вводитись як аргумент. Викличте її з аргументом JavaScript.
  • 8.
    Задача 24 Напишіть функціюmin(a,b), яка повертає менше з чисел a,b. Приклад роботи: min(2, 5) == 2 min(3, -1) == -1 min(1, 1) == 1
  • 9.
    Задача 25 Напишіть функціюpow(x,n), яка повертає x в степені n, тобто перемножує x на себе n разів і повертає результат. Вважається, що x і n – цілі додатні числа. Створіть сторінку, яка питає x і n, а потім виводить результат pow(x,n).
  • 10.
    Розв’язок function pow(x, n){ var result = x; for (var i = 1; i < n; i++) { result *= x; } return result; } var x = prompt("x?", ''); var n = prompt("n?", ''); if (n <= 1) { alert( 'Степінь ' + n + ' не підтримується, введіть ціле n > 1' ); } else { alert( pow(x, n) ); }
  • 11.
    Функціональні вирази. Function Expression Синтаксис: varf = function(параметри) { // тіло функції }; Основна відмінність: функції, оголошені як Function Declaration, створюються інтерпретатором до виконання коду. myFunction(); // 1 function myFunction() { alert( 1 ); }
  • 12.
    Функціональні вирази дозволяютьзастосувати умовне оголошення функції, наприклад: var age = prompt('Ваш вік?'); var sayHi; if (age >= 18) { sayHi = function() { alert( 'Заходьте' ); } } else { sayHi = function() { alert( 'До 18 не можна' ); } } sayHi();
  • 13.
    Рекурсія В тілі функціїможна викликати інші функції, зокрема, саму себе. function power(base, exponent) { if (exponent == 0) return 1; else return base * power(base, exponent - 1); } alert(power(2, 3));
  • 14.
    Задача 26 Напишіть функціюsumTo(n), яка для даного n рахує суму чисел від 1 до n. Задачу можна розв'язати трьома способами: 1. Через цикл. 2. Через рекурсію. 3. Через формулу суми арифметичної прогресії.
  • 15.
    Розв'язки 1. function sumTo(n) { varsum = 0; for (var i = 1; i <= n; i++) { sum += i; } return sum; }
  • 16.
    2. function sumTo(n) { if(n == 1) return 1; return n + sumTo(n - 1); } alert( sumTo(100) ); 3. function sumTo(n) { return n * (n + 1) / 2; }
  • 17.
    Задача 27 Напишіть функціюдля обчислення факторіала числа. n! = n*(n-1)*(n-2)*...*2*1.
  • 18.
    Розв'язок function factorial(n) { return(n != 1) ? n * factorial(n - 1) : 1; } alert( factorial(5) ); // 120
  • 19.
    Задача 28 Послідовність чиселФібоначчі визначається формулою Fn = Fn-1 + Fn-2. Тобто наступне число є сумою двох попередніх. Перші два числа рівні 1, далі 2 (1+1), 3(1+2), 5(2+3) і так далі: 1, 1, 2, 3, 5, 8, 13, 21.... Напишіть функцію fib(n), яка повертає n-е число Фібоначчі. Приклад роботи: function fib(n) { /* ваш код */ } alert( fib(3) ); // 2 alert( fib(7) ); // 13 alert( fib(77)); // 5527939700884757