You signed in with another tab or window.Reload to refresh your session.You signed out in another tab or window.Reload to refresh your session.You switched accounts on another tab or window.Reload to refresh your session.Dismiss alert
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Спочатку ми пишемо `function` — це ключове слово (keyword), яке дає зрозуміти комп’ютеру, що далі буде оголошення функції. Потім — *назву функції* та списокїї*параметрів*в дужках (розділенікомою). Якщопараметрів немає, ми залишаємо *пусті дужки*. І нарешті, код функції, який також називають *тілом функції* між фігурними дужками.
Спочатку ми пишемо `function` — це ключове слово (англ.keyword), яке дає зрозуміти комп’ютеру, що далі буде оголошення функції. Потім — *назву функції* тав дужкахсписокз назвами*параметрів*які наша функція має приймати (розділяючи їхкомою). Якщоми не хочемо щоб наша функція приймала параметри, ми залишаємо *пусті дужки*. І нарешті, код функції, який також називають *тілом функції* між фігурними дужками.
```js
function name(parameter1, parameter2, ... parameterN) {
Функція може використовувати зовнішні змінні, наприклад:
Функція може використовуватизмінні, які оголошені за її межами (зовнішні змінні), наприклад:
```js run no-beautify
let *!*userName*/!* = 'Іван';
Expand DownExpand Up
@@ -184,7 +184,7 @@ alert( from ); // Анна
Дехто може сказати, що в прикладі вище "функцію `showMessage` оголошено з двома параметрами, потім викликано з двома аргументами: `from` і `"Привіт"`".
##Типові значення
##Значення за замовчуванням
Якщо викликати функцію без аргументів, тоді відповідні значення стануть `undefined`.
Expand All
@@ -196,7 +196,7 @@ showMessage('Анна');
Помилки не виникне. Такий виклик виведе `"*Анна*: undefined"`. Оскільки значення для змінної `text` не задане, воно стане `undefined`.
Ми можемо задатитак зване "типове"значенняпараметра, яке використовуватиметься, якщо не задати аргумент. Для цього потрібно написати значення через `=`:
Ми можемо задатидля параметразначенняза замовчуванням, яке використовуватиметься, якщо не задати аргумент. Для цього потрібно написати значення через `=`:
```js run
function showMessage(from, *!*text = "текст не задано"*/!*) {
Expand All
@@ -208,7 +208,7 @@ showMessage("Анна"); // Анна: текст не задано
Тепер, якщо параметр `text` не задано, його значення стане `"текст не задано"`.
Типове значеннятакождодається, якщо параметр існує, але суворо дорівнює `undefined`, наприклад:
Значення за замовчуваннямтакожзастосовується, якщо параметр існує, але суворо дорівнює `undefined`, наприклад:
```js
showMessage("Анна", undefined); // Анна: текст не задано
Expand All
@@ -224,15 +224,15 @@ function showMessage(from, text = anotherFunction()) {
```
```smart header="Обчислення типових параметрів"
В JavaScript, типовий параметр обчислюється кожного разу, коливикликаєтьсяфункція без відповідногопараметру.
В JavaScript, типовий параметр обчислюєтьсяне один раз при оголошенні функції, акожного разу, коли функціявикликаєтьсябез відповідногопараметра.
В прикладі вище, функція `anotherFunction()` не викличеться, якщо буде задано параметр `text`.
З іншого боку, вона буде викликатися кожного разу, коли `text` відсутній.
```
````smart header="Типові параметри у старому JavaScript коді"
Кілька років тому JavaScript не підтримував синтаксистиповихзначень для параметрів. Тому люди використовували інші способи їх визначення.
Кілька років тому JavaScript не підтримував синтаксис значень за замовчуванням для параметрів. Тому люди використовували інші способи їх визначення.
Нині ми можемо зустріти їх у старих скриптах.
Expand All
@@ -254,18 +254,18 @@ function showMessage(from, text) {
```js
function showMessage(from, text) {
// Якщо значення у змінній textдаєfalse, призначаєтьсятиповезначення
//це передбачає, що text == "" це те саме, що і його повна відсутність
// Якщо значення у змінній textпри перетворенні на булевий тип будеfalse,їйпризначається значення за замовчуванням
//в цій ситуації скрипт сприймає `""` як те саме, що і його повна відсутність.
text = text || 'текст повідомлення відсутній';
...
}
```
````
### Альтернативнітиповіпараметри
### Альтернативні параметри за замовчуванням
Інколи виникає необхідність присвоїтитиповізначення для змінних під час виконання функції, а не під час її оголошення.
Інколи виникає необхідність присвоїти значення за замовчуванням для змінних під час виконання функції, а не під час її оголошення.
Під час виконання функції, ми можемо перевірити, чи параметр надано, порівнюючи його з `undefined`:
Expand DownExpand Up
@@ -295,7 +295,7 @@ function showMessage(text) {
}
```
Сучасні рушії JavaScript підтримують [оператор null-злиття](info:nullish-coalescing-operator) `??`. Його краще використовувати, коли "майже false" значення, типу `0`, мають вважатися за "нормальні":
Сучасні рушії JavaScript підтримують [оператороб’єднання зnull](info:nullish-coalescing-operator) `??`. Його краще використовувати, коли "майже false" значення, типу `0` або `""`, мають вважатися за "нормальні":
```js run
function showCount(count) {
Expand All
@@ -310,7 +310,7 @@ showCount(); // невідомо
## Повернення значення
Як результат функціяможе повертати назад значення в код, який викликав цю функцію.
Функціяможе повертати значення в код, який викликав цю функцію.
Найпростіший приклад — функція, яка сумує два значення:
Expand All
@@ -323,7 +323,7 @@ let result = sum(1, 2);
alert( result ); // 3
```
Директива `return` може бути в будь-якому місці функції. Коли виконання досягає цієї директиви, функція зупиняється, і в код, який викликав цю функцію, повертається значення (в прикладі вище, це значеннянадається змінній `result`).
Директива `return` може бути в будь-якому місці функції. Коли виконання досягає цієї директиви, функція зупиняється, і в код, який викликав цю функцію, повертається значення (в прикладі вище, це значенняприсвоюється в змінну `result`).
В одній функції може бути декілька директив `return`. Наприклад:
Expand DownExpand Up
@@ -368,13 +368,13 @@ function showMovie(age) {
В коді вище, якщо `checkAge(age)` поверне `false`, тоді функція `showMovie` не дійде до виконання `alert`.
````smart header="Функція з порожнім `return`, або без `return` повертає `undefined`"
Якщо функціянеповертає значення, тоді "повернене"значення буде `undefined`:
````smart header="Функція з порожнім `return`, або безвказаного в ній`return` повертає `undefined`"
Функція буде повертати значення навіть якщо виневкажете їй явно що вона повинна повертати. Простозначення це буде `undefined`:
```js run
function doNothing() { /* порожньо */ }
alert( doNothing()=== undefined); //true
alert( doNothing() ); //undefined
```
Порожній `return` це те саме, що `return undefined`:
Тобто,результат буде як ніби ми взагалі не вказали ніякого виразу після `return`.
Якщо ми хочемо повернути довгий вираз, який займе декілька рядків, ми повинні писати його на одному рядку з `return`. Або обгорнути його в дужки. Ось так:
Expand All
@@ -413,7 +413,7 @@ return (
'що' * f(a) + f(b)
)
```
Такий варіант працюватиме так, як ми задумали.
От такий варіант працюватиме так, як ми задумали.
````
## Найменування функції [#function-naming]
Expand All
@@ -438,7 +438,7 @@ showMessage(..) // показує повідомлення
getAge(..) // повертає вік (якось його отримує або обчислює)
calcSum(..) // обчислює суму і повертає результат
createForm(..) // створює форму (і зазвичай її повертає)
Якщо є префікси, погляд на ім’я функції дає зрозуміти, яку роботу вона виконує і яке значення повертає.
Expand DownExpand Up
@@ -508,7 +508,7 @@ function isPrime(n) {
}
```
Другий варіант легше зрозуміти, чи не так? Замість частини коду ми бачимо назву дії (`isPrime`). Іноді розробники називають такий код *само документованим*.
Другий варіант легше зрозуміти, чи не так? Замість частини коду ми бачимо назву дії (`isPrime`). Іноді розробники називають такий код *самодокументованим*.
Отже, функції можна створювати, навіть якщо ми не маємо наміру повторно їх використовувати. Вони структурують код і роблять його читабельним та зрозумілим.
Expand All
@@ -524,7 +524,7 @@ function ім’я(параметри, розділені, комою) {
- Значення, які передаються в функцію як параметри, копіюються в локальні змінні.
- Функції мають доступ до зовнішніх змінних. Але це працює тільки зсередини назовні. Код поза функцією не має доступу до локальних змінних функції.
- Функціяможе повертати значення. Якщоцьогоневідбувається, результат буде `undefined`.
- Функціязавжди повертає значення. Якщо невказати яке саме, то повертатиме `undefined`.
Для того, щоб зробити код чистим і зрозумілим, рекомендується використовувати локальні змінні та параметри функції, не користуватися зовнішніми змінними.
Expand All
@@ -533,7 +533,7 @@ function ім’я(параметри, розділені, комою) {
Найменування функцій:
- Ім’я функції повинне бути коротким і чітко відображати, що робить функція. Побачивши виклик функції в коді, ви повинні зразу зрозуміти, що функція робить, і що повертає.
- Функція -- це дія, тому її ім’я зазвичайскладається з дієслова.
- Функція -- це дія, тому її ім’я зазвичайпочинається з дієслова.
- Є багато загальноприйнятих префіксів, такі як `create…`, `show…`, `get…`, `check…` тощо. Використовуйте їх, щоб пояснити, що робить функція.
Функції -- це основні будівельні блоки скриптів. Ми розглянули лише основи функцій в JavaScript, проте вже зараз цього достатньо, щоб почати їх створювати та використовувати. Це лише початок шляху. Ми будемо неодноразово повертатися до функцій і аналізуватимемо їх все глибше і глибше.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.