Skip to content

Commit 7b77a35

Browse files
authored
Merge pull request lydiahallie#677 from Seruf-Che/master
uk-UA. Add questions 44-46. Fix typos
2 parents 517be14 + 2cf7833 commit 7b77a35

File tree

1 file changed

+117
-11
lines changed

1 file changed

+117
-11
lines changed

uk-UA/README.md

Lines changed: 117 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ for (let i = 0; i < 3; i++) {
8383

8484
Через черги подій в JavaScript, функція `setTimeout` викликається _після того_ як цикл буде завершено. Так як змінна `i` в першому циклі була визначена за допомогою `var`, вона буде глобальною. У циклі ми кожен раз збільшуємо значення `i` на `1`, використовуючи унарний оператор `++.` До моменту виконання функції `setTimeout` значення `i` дорівнюватиме `3`, як показано в першому прикладі.
8585

86-
У другому циклі змінна `i` визначена за допомогою `let`. Такі змінні (а також `const`) мають блочну область видимості (блок це що завгодно між `{}`). З кожною ітерацією `i` матиме нове значення, і кожне значення буде замкнуто в своїй області видимості всередині циклу.
86+
У другому циклі змінна `i` визначена за допомогою `let`. Такі змінні (а також `const`) мають блокову область видимості (блок це що завгодно між `{}`). З кожною ітерацією `i` матиме нове значення, і кожне значення буде замкнуто у своїй області видимості всередині циклу.
8787

8888
</p>
8989
</details>
@@ -422,10 +422,10 @@ console.log(sarah);
422422

423423
###### 13. Назвіть три фази поширення подій
424424

425-
- A: Мета (Target) > Захоплення (Capturing) > Всплиття (Bubbling)
426-
- B: Всплиття (Bubbling) > Мета (Target) > Захоплення (Capturing)
427-
- C: Мета (Target) > Всплиття (Bubbling) > Захоплення (Capturing)
428-
- D: Захоплення (Capturing) > Мета (Target) > Всплиття (Bubbling)
425+
- A: Мета (Target) > Захоплення (Capturing) > Спливання (Bubbling)
426+
- B: Спливання (Bubbling) > Мета (Target) > Захоплення (Capturing)
427+
- C: Мета (Target) > Спливання (Bubbling) > Захоплення (Capturing)
428+
- D: Захоплення (Capturing) > Мета (Target) > Спливання (Bubbling)
429429

430430
<details><summary><b>Відповідь</b></summary>
431431
<p>
@@ -478,7 +478,7 @@ sum(1, "2");
478478

479479
#### Відповідь: C
480480

481-
JavaScript це **динамічно тіпізірованна мова**: ми не визначаємо тип змінних. Змінні можуть автоматично бути перетворені з одного типу в інший без нашої участі, що називається _неявним приведенням типів_. **Приведення** це перетворення з одного типу в інший.
481+
JavaScript це **динамічно типізована мова**: ми не визначаємо тип змінних. Змінні можуть автоматично бути перетворені з одного типу в інший без нашої участі, що називається _неявним приведенням типів_. **Приведення** це перетворення з одного типу в інший.
482482

483483
У цьому прикладі, JavaScript конвертувати число `1` в рядок, щоб операція всередині функції мала сенс і повернула значення. Під час складання числа (`1`) і рядки (`'2'`) число перетворюється до рядка. Ми можемо додавати рядки ось так: `"Hello" + "World"`. Таким чином, "`1"` + `"2"` повертає "`12"`.
484484

@@ -662,7 +662,7 @@ const sum = eval("10*10+5");
662662

663663
#### Відповідь: A
664664

665-
`eval` виконує код, переданий у вигляді рядка. Якщо це рядок (як в даному випадку), то обчислюється вираз. Вираз `10 * 10 + 5` поверне число `105`.
665+
`eval` виконує код, переданий у вигляді рядка. Якщо це рядок (як в такому випадку), то обчислюється вираз. Вираз `10 * 10 + 5` поверне число `105`.
666666

667667
</p>
668668
</details>
@@ -788,7 +788,7 @@ console.log(obj);
788788

789789
#### Відповідь: A
790790

791-
Базовий контекст виконання це глобальний контекст виконання: це те, що є де завгодно в твоєму коді.
791+
Базовий контекст виконання це глобальний контекст виконання: це те, що є де завгодно у твоєму коді.
792792

793793
</p>
794794
</details>
@@ -1045,7 +1045,7 @@ typeof sayHi();
10451045

10461046
#### Відповідь: B
10471047

1048-
Функція `sayHi` повертає значення, що повертається з _негайно викликаного функціонального вираза_ (IIFE). Результатом є `0` типу `"number"`.
1048+
Функція `sayHi` повертає значення, що повертається з _негайно викликаного функціонального виразу_ (IIFE). Результатом є `0` типу `"number"`.
10491049

10501050
Для інформації: в JS 7 вбудованих типів: `null`, `undefined`, `boolean`, `number`, `string`, `object`, `symbol`, та `bigint`. `"Function"` не є окремим типом, тому що функції є об'єктами типу `"object"`.
10511051

@@ -1193,7 +1193,7 @@ console.log(numbers);
11931193

11941194
#### Відповідь: A
11951195

1196-
В JavaScript є тільки примітиви і об'єкти.
1196+
В JavaScript є тільки примітиви й об'єкти.
11971197

11981198
Типи примітивів: `boolean`, `null`, `undefined`, `bigint`, `number`, `string`, та `symbol`.
11991199

@@ -1286,7 +1286,7 @@ setInterval(() => console.log("Hi"), 1000);
12861286

12871287
---
12881288

1289-
###### 43. What does this return?
1289+
###### 43. Що повернеться?
12901290

12911291
```javascript
12921292
[..."Lydia"];
@@ -1306,3 +1306,109 @@ setInterval(() => console.log("Hi"), 1000);
13061306

13071307
</p>
13081308
</details>
1309+
1310+
---
1311+
1312+
###### 44. Що буде в консолі?
1313+
1314+
```javascript
1315+
function* generator(i) {
1316+
yield i;
1317+
yield i * 2;
1318+
}
1319+
1320+
const gen = generator(10);
1321+
1322+
console.log(gen.next().value);
1323+
console.log(gen.next().value);
1324+
```
1325+
1326+
- A: `[0, 10], [10, 20]`
1327+
- B: `20, 20`
1328+
- C: `10, 20`
1329+
- D: `0, 10 and 10, 20`
1330+
1331+
<details><summary><b>Answer</b></summary>
1332+
<p>
1333+
1334+
#### Відповідь: C
1335+
1336+
Звичайні функції не можна зупинити "на півдорозі" після виклику. Однак функція-генератор може зупинитися "на півдорозі", а потім продовжити з того місця, де вона зупинилась. Кожного разу, коли функція-генератор зустрічає ключове слово `yield`, функція видає значення, що вказане після нього. Зауважте, що функція-генератор в цьому випадку не _повертає_ (return) значення, вона _дає_ (yields) значення.
1337+
1338+
Спочатку ми ініціалізуємо функцію-генератор з `i` рівним `10`. Ми викликаємо функцію-генератор за допомогою методу `next()`. Коли ми вперше викликаємо функцію генератора, `i` дорівнює `10`. Перше ключове слово `yield`: воно дає значення `i`. Генератор тепер "призупинено", і `10` записується у консоль.
1339+
1340+
Потім ми знову викликаємо функцію за допомогою методу `next()`. Виконання коду продовжується там, де зупинилося раніше, все ще з `i` що дорівнює `10`. Тепер функція зустрічає наступне ключове слово `yield` і дає `i * 2`. `i` дорівнює `10`, тож віддається `10 * 2`, що дорівнює `20`. У результаті: `10, 20`.
1341+
1342+
</p>
1343+
</details>
1344+
1345+
1346+
---
1347+
1348+
###### 45. Що повернеться?
1349+
1350+
```javascript
1351+
const firstPromise = new Promise((res, rej) => {
1352+
setTimeout(res, 500, 'one');
1353+
});
1354+
1355+
const secondPromise = new Promise((res, rej) => {
1356+
setTimeout(res, 100, 'two');
1357+
});
1358+
1359+
Promise.race([firstPromise, secondPromise]).then(res => console.log(res));
1360+
```
1361+
1362+
- A: `"one"`
1363+
- B: `"two"`
1364+
- C: `"two" "one"`
1365+
- D: `"one" "two"`
1366+
1367+
<details><summary><b>Answer</b></summary>
1368+
<p>
1369+
1370+
#### Відповідь: B
1371+
1372+
Коли ми передаємо кілька промісів методу `Promise.race`, він вирішує/відхиляє _перший_ проміс, яки вирішився/відхилився. Методу `setTimeout` ми передаємо таймер: 500 мс для першого промісу (`firstPromise`) та 100 мс для другого промісу (`secondPromise`). Це означає, що `secondPromise` вирішиться першим зі значенням `'two'`. `res` тепер містить значення `'two'`, яке буде зображено у консолі.
1373+
1374+
</p>
1375+
</details>
1376+
1377+
---
1378+
1379+
###### 46. Що буде на виході?
1380+
1381+
```javascript
1382+
let person = { name: 'Lydia' };
1383+
const members = [person];
1384+
person = null;
1385+
1386+
console.log(members);
1387+
```
1388+
1389+
- A: `null`
1390+
- B: `[null]`
1391+
- C: `[{}]`
1392+
- D: `[{ name: "Lydia" }]`
1393+
1394+
<details><summary><b>Answer</b></summary>
1395+
<p>
1396+
1397+
#### Відповідь: D
1398+
1399+
Спочатку ми оголошуємо змінну `person` що містить об'єкта, який має властивість `name`.
1400+
1401+
<img src="https://i.imgur.com/TML1MbS.png" width="200">
1402+
1403+
Потім ми оголошуємо змінну `members`. Ми встановлюємо перший елемент масиву рівним значенню змінної `person`. Об'єкти взаємодіють за допомогою _посилання_, коли їх встановлюють рівними один одному. Коли ви призначаєте посилання з однієї змінної на іншу, ви робите _копію_ цього посилання. (зверніть увагу, що вони не мають _однакового_ посилання!)
1404+
1405+
<img src="https://i.imgur.com/FSG5K3F.png" width="300">
1406+
1407+
Далі ми встановлюємо змінну `person` рівною `null`.
1408+
1409+
<img src="https://i.imgur.com/sYjcsMT.png" width="300">
1410+
1411+
Ми лише змінюємо значення змінної `person`, а не перший елемент у масиві, оскільки цей елемент має інше (скопійоване) посилання на об’єкт.Перший елемент у `members` все ще містить своє посилання на вихідний об’єкт. Коли ми виводимо у консоль масив `members`, перший елемент усе ще містить значення об'єкта, який і показується у консолі.
1412+
1413+
</p>
1414+
</details>

0 commit comments

Comments
 (0)