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
Для JavaScript функція — це не "магічна мовна структура", а значення особливого ґатунку.
Для JavaScript функція — це не "магічна мовна структура", а значення. Просто не звичайне, а особливе.
Синтаксис, що ми раніше використовували, називається [*Оголошення Функції*](https://developer.mozilla.org/uk/docs/Web/JavaScript/Guide/Functions#Оголошення_функції) (Function Declaration):
Синтаксис, що ми раніше використовували, називається [*Оголошенням Функції*](https://developer.mozilla.org/uk/docs/Web/JavaScript/Guide/Functions#Оголошення_функції) (Function Declaration):
```js
function sayHi() {
Expand DownExpand Up
@@ -34,7 +34,7 @@ let sayHi = function() {
## Функція -- це значення
Повторімо:немає значення,яким чином створено функцію, функція -- це завжди значення. В обох прикладах вище, функція зберігається в змінній `sayHi`.
Повторімо:незалежно від тогояким чином створено функцію, всеодно функція -- це завжди значення. В обох прикладах вище, функція зберігається в змінній `sayHi`.
Ми навіть можемо вивести це значення, використовуючи `alert`:
Expand All
@@ -52,9 +52,9 @@ alert( sayHi ); // показує код функції
У JavaScript функція — це значення, тому ми можемо поводитись з нею, як і з іншими значеннями. Код вище показує її рядкове представлення — вихідний код.
Звичайно, функція — особливе значення, у тому сенсі, що ми можемо здійснити її виклик за допомогою дужок: `sayHi()`.
Звичайно, функція — особливе значення. Особливе тим, що ми можемо здійснити її виклик за допомогою дужок: `sayHi()`.
Але цевсе-таки значення. Тому ми можемо працювати з нею, як і з іншими значеннями.
Але цевсеодно значення. Тому ми можемо працювати з нею, як і з іншими значеннями.
Скажімо, ми можемо скопіювати функцію в іншу змінну:
Expand All
@@ -75,7 +75,7 @@ sayHi(); // Привіт // ось так теж спрацює (а чо
2. Рядок `(2)` копіює це значення в змінну `func`. Ще раз зауважте: після `sayHi` немає дужок. Якби вони там були, тоді `func = sayHi()` записав би *результат виклику* `sayHi()` у `func`, а не *саму функцію* `sayHi`.
3. Тепер ми можемо викликати функцію двома шляхами: `sayHi()` або `func()`.
Також ми могли використати Функціональний Вираз у першому рядку, щобвизначити `sayHi`:
Також ми могли використати Функціональний Вираз у першому рядку, щобоголосити `sayHi`:
```js
let sayHi = function() { // (1) створити
Expand DownExpand Up
@@ -144,7 +144,7 @@ function showCancel() {
ask("Ви згодні?", showOk, showCancel);
```
Такі функції є досить практичними. Головна відмінність між функцією `ask` у реальних програмах та прикладі вище, полягає в тому, що перша може використовувати складніші способи взаємодії з користувачем, ніж звичайний `confirm`. У браузерах така функція зазвичай показує гарненьке модальне вікно з запитанням. Але це вже інша історія.
Такі функції є досить практичними. Головна відмінність між функцією `ask` у реальних програмах тавприкладі вище, полягає в тому, що перша може використовувати складніші способи взаємодії з користувачем, ніж звичайний `confirm`. У браузерах така функція зазвичай показує гарненьке модальне вікно з запитанням. Але це вже інша історія.
**Аргументи `showOk` та `showCancel` функції `ask` називаються *функціями зворотного виклику* або просто *колбеками*.**
Expand All
@@ -167,7 +167,7 @@ ask(
*/!*
```
У цьому прикладі функції оголошені всередині виклику `ask(...)`. Вони не мають власного ім'я, тому називаються *анонімними*.До таких функційне можнадоступитись поза `ask` (бо вони не присвоєні змінним), але це саме те, що нам потрібно.
У цьому прикладі функції оголошені всередині виклику `ask(...)`. Вони не мають власного ім'я, тому називаються *анонімними*.Ці функціїне можнавикликати за межами `ask` (бо вони не присвоєні змінним), але це саме те, що нам потрібно.
Подібний код, що з'явився в нашому скрипті є природним, в дусі JavaScript.
Expand All
@@ -194,7 +194,7 @@ ask(
return a + b;
}
```
- *Функціональний Вираз:* функція створюється як частина іншого виразу чи синтаксичної конструкції. Нижче, створення функції відбувається в правій частині "виразу присвоєння" `=`:
- *Функціональний Вираз:* функція створюється як частина іншого виразу чи синтаксичної конструкції. Нижче, створення функції відбувається в правій частині "виразу присвоєння", тобто після `=`:
```js
// Функціональний Вираз
Expand DownExpand Up
@@ -249,9 +249,9 @@ let sayHi = function(name) { // (*) більше ніякої магії
Ще однією особливістю Оголошення Функції є її блокова область видимості.
**У суворому режимі, якщо Оголошення Функції знаходиться в блоці `{...}`, то функція доступна усюди всередині блоку. Але не зовні.**
**У[суворому режимі](info:strict-mode), якщо Оголошення Функції знаходиться в блоці `{...}`, то функція доступна усюди всередині блоку. Але не зовні.**
Уявімо, що нам потрібно визначити функцію `welcome()`залежно від змінної `age`, яку ми отримаємо під час виконання коду. Далі в скрипті нам буде потрібно викликати цю функцію.
Уявімо, що нам потрібно визначити функцію `welcome()`опираючись на значення змінної `age`, яку ми отримаємо під час виконання коду. Далі в скрипті нам буде потрібно викликати цю функцію.
Якщо ми використаємо Оголошення Функції, то це не буде працювати:
Expand DownExpand Up
@@ -360,7 +360,7 @@ welcome(); // спрацює
```smart header="Коли використовувати Оголошення Функції, а коли -- Функціональний Вираз?"
Зазвичай, коли нам потрібна функція, то найперше потрібно розглянути синтаксис Оголошення Функції. Він дає нам більше свободи у тому, як організовувати код, оскільки дозволяє викликати функції ще до їх визначення.
Зазвичай краще надавати перевагу синтаксису Оголошення Функції. Він дає нам більше свободи у тому, як організовувати код, оскільки дозволяє викликати функції ще до їх визначення.
Також функції `function f(…) {…}` простіше помітити в коді, ніж `let f = function(…) {…};`. Оголошення Функції легше "ловляться очима".
Expand Down
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.