Skip to content

Commit

Permalink
update(JS): web/javascript/reference/guide/functions (#1052)
Browse files Browse the repository at this point in the history
* update(JS): web/javascript/guide/functions

* update(JS): web/javascript/guide/functions
  • Loading branch information
undead404 authored Dec 7, 2022
1 parent 58b4f6c commit a02bd2e
Showing 1 changed file with 35 additions and 26 deletions.
61 changes: 35 additions & 26 deletions files/uk/web/javascript/guide/functions/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,28 +161,7 @@ square(5);

Інструкція вище викликає функцію з аргументом `5`. Функція виконує свої інструкції й повертає значення `25`.

Функції повинні бути _доступні в області видимості_, коли викликані, але оголошення функції може бути піднято (стояти в коді нижче свого виклику), як в цьому прикладі:

```js
console.log(square(5));
//
function square(n) {
return n * n;
}
```

Областю видимості функції є функція, в котрій вона була оголошена (або вся програма, якщо функція була оголошена на верхньому рівні).

> **Примітка:** Це працює лише при визначенні функції за допомогою синтаксису вище (тобто `function funcName(){}`). Код нижче не спрацює.
>
> Це означає, що підйом працює лише з _оголошеннями_ функцій – але не з _виразами_ функцій.
>
> ```js example-bad
> console.log(square); // ReferenceError: Cannot access 'square' before initialization
> const square = function (n) {
> return n * n;
> };
> ```
Функції повинні бути _доступні в області видимості_, коли викликані, але оголошення функції може бути [піднято](#pidniattia-funktsii) (стояти в коді нижче власного виклику). Областю видимості оголошення функції є та функція, в якій перша була оголошена (або вся програма, якщо функцію оголошено за верхньому рівні).

Аргументи функцій не обмежені рядками й числами. У функції можна передавати цілі об'єкти. Функція `showProps()` (визначена в [Роботі з об'єктами](/uk/docs/Web/JavaScript/Guide/Working_with_Objects#obiekty-ta-vlastyvosti)) є прикладом функції, котра приймає об'єкт за аргумент.

Expand Down Expand Up @@ -212,6 +191,36 @@ const e = factorial(5); // e отримує значення 120

Виявляється, _функції самі є об'єктами_ – і ці об'єкти й собі мають методи. (Дивіться об'єкт {{jsxref("Function")}}.) Методи [`call()`](/uk/docs/Web/JavaScript/Reference/Global_Objects/Function/call) і [`apply()`](/uk/docs/Web/JavaScript/Reference/Global_Objects/Function/apply) можуть бути використані для досягнення такої цілі.

### Підняття функцій

Розгляньмо приклад нижче:

```js
console.log(square(5)); // 25
function square(n) {
return n * n;
}
```

Такий код виконається без жодних помилок, попри те, що функція `square()` викликана до власного оголошення. Так відбувається через те, що інтерпретатор JavaScript піднімає все оголошення функції нагору поточної області видимості, тож код вище рівносильний такому кодові:

```js
// Усі оголошення функцій по суті спрацьовують нагорі області видимості
function square(n) {
return n * n;
}
console.log(square(5)); // 25
```

Підняття функцій працює лише для _оголошень_ функцій – але не _виразів_ функцій. Код нижче не запрацює.

```js example-bad
console.log(square); // ReferenceError: Cannot access 'square' before initialization
const square = function (n) {
return n * n;
};
```

## Функційна область видимості

До змінних, визначених всередині функції, не можна звертатися нізвідки поза функцією, тому що змінна визначена лише в області видимості цієї функції. Проте функція може звертатися до всіх змінних та функцій, визначених всередині області видимості, в котрій визначена сама ця функція.
Expand Down Expand Up @@ -328,7 +337,7 @@ function foo(i) {
}
foo(3);

// Вивід:
// Виводить:

// початок: 3
// початок: 2
Expand Down Expand Up @@ -409,7 +418,7 @@ function A(x) {
}
B(2);
}
A(1); // виводить 6 (1 + 2 + 3)
A(1); // Виводить 6 (тобто 1 + 2 + 3)
```

В цьому прикладі `C` звертається до `y` з `B` та `x` з `A`.
Expand Down Expand Up @@ -642,11 +651,11 @@ const a2 = a.map(function (s) {
return s.length;
});

console.log(a2); // виводить [8, 5, 5, 7]
console.log(a2); // [8, 5, 5, 7]

const a3 = a.map((s) => s.length);

console.log(a3); // виводить [8, 5, 5, 7]
console.log(a3); // [8, 5, 5, 7]
```

### Немає окремого this
Expand Down

0 comments on commit a02bd2e

Please sign in to comment.