Введение
Функции в JavaScript позволяют передавать данные через параметры и аргументы. Параметры и аргументы функций — это важный аспект программирования, который позволяет сделать функции более гибкими и повторно используемыми. В этом уроке мы рассмотрим, как объявлять параметры, передавать аргументы и работать с ними внутри функций.
Что такое параметры и аргументы
- Параметры — это переменные, которые указаны в объявлении функции и используются для получения данных.
- Аргументы — это значения, которые передаются функции при ее вызове и присваиваются параметрам.
Пример:
function greet(name) { // 'name' - это параметр
console.log("Привет, " + name + "!");
}
greet("Иван"); // 'Иван' - это аргумент
Объявление параметров
Параметры объявляются внутри круглых скобок при определении функции. Можно объявить несколько параметров, разделяя их запятыми.
Пример функции с несколькими параметрами:
function sum(a, b) {
return a + b;
}
Пример вызова функции с аргументами:
let result = sum(3, 4); // 3 и 4 - это аргументы
console.log(result); // 7
Значения по умолчанию для параметров
В ES6 была введена возможность задавать значения по умолчанию для параметров. Если аргумент не передан при вызове функции, будет использоваться значение по умолчанию.
Пример значения по умолчанию:
function greet(name = "гость") {
console.log("Привет, " + name + "!");
}
greet(); // Привет, гость!
greet("Анна"); // Привет, Анна!
Параметры rest (остаточные параметры)
Остаточные параметры позволяют функции принимать неопределенное количество аргументов и собирать их в массив.
Пример использования остаточных параметров:
function sumAll(...numbers) {
let sum = 0;
for (let num of numbers) {
sum += num;
}
return sum;
}
console.log(sumAll(1, 2, 3)); // 6
console.log(sumAll(4, 5, 6, 7)); // 22
Псевдомассив arguments
Функции в JavaScript имеют специальный объект arguments
, который содержит все переданные функции аргументы. Это полезно для функций, которые могут принимать переменное количество аргументов.
Пример использования объекта arguments
:
function sumAll() {
let sum = 0;
for (let i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
console.log(sumAll(1, 2, 3)); // 6
console.log(sumAll(4, 5, 6, 7)); // 22
Заключение
Параметры и аргументы позволяют функциям работать с данными, передаваемыми при вызове. Понимание того, как объявлять параметры, передавать аргументы и использовать значения по умолчанию, остаточные параметры и объект arguments, помогает сделать функции более гибкими и мощными.
Контрольные вопросы
Что такое параметры функции в JavaScript?
- Переменные, указанные в объявлении функции для получения данных.
- Значения, передаваемые функции при ее вызове.
- Блоки кода, выполняемые внутри функции.
- Значения, возвращаемые функцией.
Что такое аргументы функции в JavaScript?
- Переменные, указанные в объявлении функции.
- Значения, передаваемые функции при ее вызове.
- Блоки кода, выполняемые внутри функции.
- Значения, возвращаемые функцией.
Как задать значение по умолчанию для параметра функции?
- Указать значение после имени параметра в объявлении функции.
- Передать значение при вызове функции.
- Использовать оператор
||
. - Использовать метод
default
.
Какой результат будет у функции greet
, если вызвать ее без аргументов, если параметр name
имеет значение по умолчанию «гость»?
- Привет, мир!
- Привет, гость!
- Привет,
undefined
! - Произойдет ошибка.
Как собрать неопределенное количество аргументов в массив внутри функции?
- Использовать оператор
||
. - Использовать остаточные параметры
....
- Использовать метод
Array.from
. - Использовать объект
arguments
.
Что такое объект arguments
в функции?
- Специальный объект, содержащий все переданные функции аргументы.
- Объект, возвращаемый функцией.
- Объект, содержащий параметры функции.
- Специальный объект, содержащий значения по умолчанию для параметров.
Как использовать остаточные параметры в объявлении функции?
function myFunc(...args) { // код }
function myFunc(args...) { // код }
function myFunc([args]) { // код }
function myFunc(args) { // код }
Упражнения
Практическое задание 1: Нахождение наибольшего общего делителя
Создайте функцию gcd
, которая принимает два числа и возвращает их наибольший общий делитель (НОД) с использованием алгоритма Евклида.
function gcd(a, b) {
while (b !== 0) {
let temp = b;
b = a % b;
a = temp;
}
return a;
}
console.log(gcd(56, 98)); // 14
console.log(gcd(48, 18)); // 6
Практическое задание 2: Возведение в степень
Создайте функцию power
, которая принимает два числа, base
и exponent
, и возвращает результат возведения base
в степень exponent
.
function power(base, exponent) {
let result = 1;
for (let i = 0; i < exponent; i++) {
result *= base;
}
return result;
}
console.log(power(2, 3)); // 8
console.log(power(5, 4)); // 625
Практическое задание 3: Простейший калькулятор
Создайте функцию calculator
, которая принимает три параметра: два числа и строку, представляющую операцию ('add'
, 'subtract'
, 'multiply'
, 'divide'
). Функция должна возвращать результат выполнения указанной операции над двумя числами.
function calculator(a, b, operation) {
if (operation === 'add') {
return a + b;
} else if (operation === 'subtract') {
return a - b;
} else if (operation === 'multiply') {
return a * b;
} else if (operation === 'divide') {
return a / b;
} else {
return "Invalid operation";
}
}
console.log(calculator(10, 5, 'add')); // 15
console.log(calculator(10, 5, 'subtract')); // 5
console.log(calculator(10, 5, 'multiply')); // 50
console.log(calculator(10, 5, 'divide')); // 2
Практическое задание 4: Перевод числа в строку и обратно
Создайте функцию numberToString
и stringToNumber
, которые принимают число и строку соответственно и возвращают строку и число.
function numberToString(num) {
return '' + num;
}
function stringToNumber(str) {
return +str;
}
console.log(numberToString(123)); // "123"
console.log(stringToNumber("456")); // 456
Практическое задание 5: Проверка на четность
Создайте функцию isEven
, которая принимает число и возвращает true
, если число четное, и false
в противном случае.
function isEven(num) {
return num % 2 === 0;
}
console.log(isEven(4)); // true
console.log(isEven(7)); // false
Практическое задание 6: Простейший шифр Цезаря
Создайте функцию caesarCipher
, которая принимает строку и число (сдвиг), и возвращает зашифрованную строку, где каждая буква сдвинута на указанное количество позиций в алфавите.
function caesarCipher(str, shift) {
let result = '';
for (let i = 0; i < str.length; i++) {
let charCode = str.charCodeAt(i);
if (charCode >= 65 && charCode <= 90) { // Uppercase letters
result += String.fromCharCode((charCode - 65 + shift) % 26 + 65);
} else if (charCode >= 97 && charCode <= 122) { // Lowercase letters
result += String.fromCharCode((charCode - 97 + shift) % 26 + 97);
} else {
result += str[i];
}
}
return result;
}
console.log(caesarCipher("hello", 3)); // "khoor"
console.log(caesarCipher("abc", 1)); // "bcd"
Практическое задание 7: Проверка високосного года
Создайте функцию isLeapYear
, которая принимает год и возвращает true
, если год високосный, и false
в противном случае.
function isLeapYear(year) {
if (year % 4 === 0) {
if (year % 100 === 0) {
if (year % 400 === 0) {
return true;
}
return false;
}
return true;
}
return false;
}
console.log(isLeapYear(2020)); // true
console.log(isLeapYear(1900)); // false
console.log(isLeapYear(2000)); // true
Практическое задание 8: Нахождение корня уравнения методом деления пополам
Создайте функцию findRoot
, которая находит корень линейного уравнения вида ax + b = 0
методом деления пополам.
function findRoot(a, b) {
let left = -1000, right = 1000, mid;
while (right - left > 1e-7) {
mid = (left + right) / 2;
if (a * mid + b === 0) {
return mid;
} else if (a * mid + b < 0) {
left = mid;
} else {
right = mid;
}
}
return mid;
}
console.log(findRoot(2, -4)); // 2 (приблизительно)
console.log(findRoot(1, -3)); // 3 (приблизительно)
Практическое задание 9: Генерация случайного числа
Создайте функцию randomInRange
, которая принимает два числа min
и max
, и возвращает случайное целое число в этом диапазоне (включительно).
function randomInRange(min, max) {
return Math.floor(min + Math.random() * (max - min + 1));
}
console.log(randomInRange(1, 10)); // случайное число от 1 до 10
console.log(randomInRange(20, 30)); // случайное число от 20 до 30
Практическое задание 10: Проверка простого числа без использования Math
Создайте функцию isPrime
, которая принимает число и возвращает true
, если число является простым, и false
в противном случае.
function isPrime(num) {
if (num <= 1) {
return false;
}
for (let i = 2; i < num; i++) {
if (num % i === 0) {
return false;
}
}
return true;
}
console.log(isPrime(7)); // true
console.log(isPrime(10)); // false