Функсияҳо
Ин барои чӣ лозим аст
Тасаввур кунед, ки дар барнома даҳ маротиба нархро бо тахфиф ҳисоб кардан лозим аст. Мумкин аст як формуларо даҳ маротиба нусхабардорӣ кунед — ва баъд, агар формула иваз шавад, ҳамаи даҳ ҷойро ҷустуҷӯ ва ислоҳ кунед. Функсия инро ҳал мекунад: код як маротиба навишта мешавад, ном мегирад, ва минбаъд онро танҳо бо ном даъват мекунанд.
Функсияҳо — хишти асосии ҳар барнома. console.log, Math.round, Number — ҳамаи инҳо функсияҳое мебошанд,
ки барои шумо навиштаанд. Акнун функсияҳои худро менависем.
Эълон ва даъват
function sayHi() {
console.log("Салом!");
}
sayHi();
sayHi();
Натиҷа:
Салом!
Салом!
Калимаи function, ном, қавсҳои доиравӣ ва тан дар қавсҳои фигурӣ — ин эълон аст. Худ аз худ он ҳеҷ чизро
иҷро намекунад. Коди дохилӣ танҳо ҳангоми даъват оғоз меёбад: ном ва қавсҳо sayHi().
Параметрҳо ва аргументҳо
Барои он ки функсия бо додаҳои гуногун кор кунад, ба он параметрҳо медиҳанд — тағйирёбандаҳо дар қавсҳои эълон:
function greet(name, age) {
console.log(`Салом, ${name}! Ту ${age}-сола.`);
}
greet("Аня", 15);
greet("Тимур", 17);
Натиҷа:
Салом, Аня! Ту 15-сола.
Салом, Тимур! Ту 17-сола.
name ва age — параметрҳо (номҳо дар эълон). "Аня" ва 15 — аргументҳо (қиматҳо ҳангоми
даъват). Ҳангоми даъват аргументҳо бо тартиб ба параметрҳо гузошта мешаванд.
Агар аргумент дода нашавад, параметр undefined мешавад. Барои пешгирии ин қимати пешфарз медиҳанд:
function greet(name = "меҳмон") {
console.log(`Салом, ${name}!`);
}
greet();
greet("Ира");
Натиҷа:
Салом, меҳмон!
Салом, Ира!
return — баргардондани натиҷа
console.log дар дохили функсия қиматро танҳо нишон медиҳад. Барои он ки натиҷаро минбаъд истифода
бурдан мумкин бошад — ҷамъ кардан, муқоиса кардан, ба функсияи дигар додан, — онро баргардондан лозим аст:
function square(n) {
return n * n;
}
const a = square(3);
console.log(a + square(4));
Натиҷа:
25
return функсияро фавран анҷом медиҳад: коди баъд аз он иҷро намешавад. Функсия бе return undefined бармегардонад.
Функсияҳо функсияҳоро даъват мекунанд
Масъалаи калонро ба функсияҳои хурд тақсим кардан қулай аст:
function priceWithTax(price) {
return price * 1.2;
}
function cartTotal(a, b) {
return priceWithTax(a) + priceWithTax(b);
}
console.log(cartTotal(100, 50));
Натиҷа:
180
Функсияи хуб як кор мекунад, ва номи он — феълест, ки ин корро тасвир мекунад: getPrice, isValid,
formatDate, showMessage.
Доираи намоёнӣ
Тағйирёбандае, ки дар дохили функсия сохта шудааст, танҳо дар дохили он намоён аст:
function test() {
const secret = 42;
console.log(secret);
}
test();
console.log(typeof secret);
Натиҷа:
42
undefined
Берун secret вуҷуд надорад. Ин хуб аст: функсияҳо ба ҳамдигар халал намерасонанд, ҳатто агар дар дохил
тағйирёбандаҳои ҳамном дошта бошанд. Аммо тағйирёбандаҳои берунаро функсия дида метавонад:
const rate = 0.1;
function bonus(salary) {
return salary * rate; // rate аз коди беруна гирифта мешавад
}
console.log(bonus(5000));
Натиҷа:
500
Қавсҳои фигурии if, for ва ҳар гуна {} низ барои let ва const доираи худро месозанд.
Дар дохил чӣ гуна кор мекунад
Ҳангоми ҳар даъват муҳаррик барои функсия «утоқ»-и нав месозад — маҷмӯи тағйирёбандаҳои маҳаллӣ ва
параметрҳои он — ва дар хотир нигоҳ медорад, ки ба куҷо баргардад. Вақте ки функсия ба return (ё ба охир)
мерасад, утоқ тоза мешавад, ва натиҷа ба ҷойи даъват гузошта мешавад: square(3) + 1 ба 9 + 1 табдил меёбад.
Функсияҳое, ки бо function name() {} эълон шудаанд, ҳатто болотар аз ҷойи навишташуда даъват карда
мешаванд: муҳаррик ҳамаи чунин эълонҳоро пешакӣ меёбад. Инро боло баромадан (hoisting) меноманд.
Хатоҳои маъмул
console.logба ҷойиreturn. Функсия натиҷаро чоп мекунад, аммоundefinedбармегардонад. Санҷиш қимати баргардондашуда-ро муқоиса мекунад.- Қавсҳо ҳангоми даъват фаромӯш шуданд.
sayHiбе()— худи функсия аст, на даъвати он. - Аргументҳо на бо он тартиб.
clamp(0, 10, 5)ба ҷойиclamp(5, 0, 10)— параметрҳо бо тартиб гирифта мешаванд. - Код баъд аз
return. Он ҳеҷ гоҳ иҷро намешавад. - Тағйирёбандаи маҳаллиро берун истифода мебаранд. Тағйирёбанда аз функсия берун намоён нест — онро бо
returnбаргардонед.
Ёддошт
| Чӣ | Чӣ тавр |
|---|---|
| Эълон кардан | function name(a, b) { … } |
| Даъват кардан | name(1, 2) |
| Баргардондани натиҷа | return a + b; |
| Пешфарз | function f(x = 10) { … } |
| Бе return | undefined бармегардонад |
| Тағйирёбандаҳои маҳаллӣ | танҳо дар дохили функсия намоёнанд |