Функции
Простая функция
function sayHello() { console.log("Hello!");}
sayHello(); // Вызов функцииsayHello(); // Вызов функцииsayHello(); // Вызов функции
Функция с параметрами
function sayHelloToSomeone(fullname) { console.log(`Hello ${fullname}!`);}
sayHelloToSomeone("alex"); // Передаём аргументsayHelloToSomeone("bob"); // Передаём аргументsayHelloToSomeone("carl"); // Передаём аргумент
Функция с return
function calculateDiagonal(a, b) { // Создание функции которая возвращает результат const result = Math.sqrt(a ** 2 + b ** 2); return result;}
const result1 = calculateDiagonal(3, 4);const result2 = calculateDiagonal(16, 9);const result3 = calculateDiagonal(21, 9);
console.log(result1);console.log(result2);console.log(result3);
Параметры по умолчанию
function fallingTime(height, g=9.8) { const time = Math.sqrt(2 * height / g); return time;}
const height = 100;
const earth = fallingTime(height);console.log(earth);
const moon = fallingTime(height, 1.6);console.log(moon);
Spread оператор
function printStudent(firstName, score, university) { console.log(`Name: ${firstName}, score: ${score}, university: ${university}`);}
const alex = ["alex", 86, "KBTU"];const bob = ["bob", 82, "SDU"];
printStudent(...alex);printStudent(...bob);
Rest оператор
function sum(...numbers){ let result = 0; for(const n of numbers) result += n; console.log(result);}sum(6, 4, 5);sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Функция как объект
function calculateDiagonal(a, b) { // Создание функции которая возвращает результат const result = Math.sqrt(a ** 2 + b ** 2); return result;}
const a = calculateDiagonal; // присвоение функции к переменной
const result1 = a(3, 4);const result2 = a(16, 9);const result3 = a(21, 9);
console.log(result1);console.log(result2);console.log(result3);
Функция как параметр
function isEven(number) { return number % 2 === 0;}
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
function myFilter(array, predicate) { const filteredArray = []; for (const item of array) { if (predicate(item)) { filteredArray.push(item); } } return filteredArray;}
const result = myFilter(numbers, isEven);console.log(result);
Анонимная функция
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
function myFilter(array, predicate) { const filteredArray = []; for (const item of array) { if (predicate(item)) { filteredArray.push(item); } } return filteredArray;}
const result1 = myFilter(numbers, function (number) { return number % 2 === 0; });
const isEven = function (number) { return number % 2 === 0; };
const result2 = myFilter(numbers, isEven);
console.log(result1);console.log(result2);
Стрелочная функция
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
function myFilter(array, predicate) { const filteredArray = []; for (const item of array) { if (predicate(item)) { filteredArray.push(item); } } return filteredArray;}
const result1 = myFilter(numbers, (number) => { return number % 2 === 0; });
const isEven = (number) => number % 2 === 0;
const result2 = myFilter(numbers, isEven);
console.log(result1);console.log(result2);
Разница между анонимным функциями и стрелочными функциями
// Анонимная функцияconst obj = {value: 10, getValue: function() { return function() { return this.value; // this будет указывать на глобальный объект, а не на obj };}};
// Стрелочная функцияconst obj2 = { value: 10, getValue: function() { return () => { return this.value; // this будет указывать на obj2 }; }};
const result1 = obj.getValue()();const result2 = obj2.getValue()();console.log(result1);console.log(result2);
Рекурсия
Факториал числа
function factorial(n) { if (n === 0) { return 1; } else { return n * factorial(n - 1); } }
console.log(factorial(5));
Рекурсивный обход в глубину
function traverseDFS(node, callback) { callback(node);
if (node.children) { for (const child of node.children) { traverseDFS(child, callback); } } }
const tree = { value: 1, children: [ { value: 2, children: [{ value: 4 }, { value: 5 }] }, { value: 3, children: [{ value: 6 }] }, ], };
traverseDFS(tree, (node) => console.log(node.value));
Замыкания
function createCounter() { let count = 0;
return { increment: function() { count++; return count; }, decrement: function() { count--; return count; }, getValue: function() { return count; } }; }
const counter = createCounter();
console.log(counter.increment()); // 1 console.log(counter.increment()); // 2 console.log(counter.decrement()); // 1 console.log(counter.getValue()); // 1