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
Через черги подій в JavaScript, функція `setTimeout` викликається _після того_ як цикл буде завершено. Так як змінна `i` в першому циклі була визначена за допомогою `var`, вона буде глобальною. У циклі ми кожен раз збільшуємо значення `i` на `1`, використовуючи унарний оператор `++.` До моменту виконання функції `setTimeout` значення `i` дорівнюватиме `3`, як показано в першому прикладі.
85
85
86
-
У другому циклі змінна `i` визначена за допомогою `let`. Такі змінні (а також `const`) мають блочну область видимості (блок це що завгодно між `{}`). З кожною ітерацією `i` матиме нове значення, і кожне значення буде замкнуто в своїй області видимості всередині циклу.
86
+
У другому циклі змінна `i` визначена за допомогою `let`. Такі змінні (а також `const`) мають блокову область видимості (блок це що завгодно між `{}`). З кожною ітерацією `i` матиме нове значення, і кожне значення буде замкнуто у своїй області видимості всередині циклу.
87
87
88
88
</p>
89
89
</details>
@@ -422,10 +422,10 @@ console.log(sarah);
422
422
423
423
###### 13. Назвіть три фази поширення подій
424
424
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)
429
429
430
430
<details><summary><b>Відповідь</b></summary>
431
431
<p>
@@ -478,7 +478,7 @@ sum(1, "2");
478
478
479
479
#### Відповідь: C
480
480
481
-
JavaScript це **динамічно тіпізірованна мова**: ми не визначаємо тип змінних. Змінні можуть автоматично бути перетворені з одного типу в інший без нашої участі, що називається _неявним приведенням типів_. **Приведення** це перетворення з одного типу в інший.
481
+
JavaScript це **динамічно типізована мова**: ми не визначаємо тип змінних. Змінні можуть автоматично бути перетворені з одного типу в інший без нашої участі, що називається _неявним приведенням типів_. **Приведення** це перетворення з одного типу в інший.
482
482
483
483
У цьому прикладі, JavaScript конвертувати число `1` в рядок, щоб операція всередині функції мала сенс і повернула значення. Під час складання числа (`1`) і рядки (`'2'`) число перетворюється до рядка. Ми можемо додавати рядки ось так: `"Hello" + "World"`. Таким чином, "`1"` + `"2"` повертає "`12"`.
484
484
@@ -662,7 +662,7 @@ const sum = eval("10*10+5");
662
662
663
663
#### Відповідь: A
664
664
665
-
`eval` виконує код, переданий у вигляді рядка. Якщо це рядок (як в даному випадку), то обчислюється вираз. Вираз `10 * 10 + 5` поверне число `105`.
665
+
`eval` виконує код, переданий у вигляді рядка. Якщо це рядок (як в такому випадку), то обчислюється вираз. Вираз `10 * 10 + 5` поверне число `105`.
666
666
667
667
</p>
668
668
</details>
@@ -788,7 +788,7 @@ console.log(obj);
788
788
789
789
#### Відповідь: A
790
790
791
-
Базовий контекст виконання це глобальний контекст виконання: це те, що є де завгодно в твоєму коді.
791
+
Базовий контекст виконання це глобальний контекст виконання: це те, що є де завгодно у твоєму коді.
792
792
793
793
</p>
794
794
</details>
@@ -1045,7 +1045,7 @@ typeof sayHi();
1045
1045
1046
1046
#### Відповідь: B
1047
1047
1048
-
Функція `sayHi` повертає значення, що повертається з _негайно викликаного функціонального вираза_ (IIFE). Результатом є `0` типу `"number"`.
1048
+
Функція `sayHi` повертає значення, що повертається з _негайно викликаного функціонального виразу_ (IIFE). Результатом є `0` типу `"number"`.
1049
1049
1050
1050
Для інформації: в JS 7 вбудованих типів: `null`, `undefined`, `boolean`, `number`, `string`, `object`, `symbol`, та `bigint`. `"Function"` не є окремим типом, тому що функції є об'єктами типу `"object"`.
1051
1051
@@ -1193,7 +1193,7 @@ console.log(numbers);
1193
1193
1194
1194
#### Відповідь: A
1195
1195
1196
-
В JavaScript є тільки примітиви і об'єкти.
1196
+
В JavaScript є тільки примітиви й об'єкти.
1197
1197
1198
1198
Типи примітивів: `boolean`, `null`, `undefined`, `bigint`, `number`, `string`, та `symbol`.
Звичайні функції не можна зупинити "на півдорозі" після виклику. Однак функція-генератор може зупинитися "на півдорозі", а потім продовжити з того місця, де вона зупинилась. Кожного разу, коли функція-генератор зустрічає ключове слово `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`.
Коли ми передаємо кілька промісів методу `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
+
constmembers= [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`.
Потім ми оголошуємо змінну `members`. Ми встановлюємо перший елемент масиву рівним значенню змінної `person`. Об'єкти взаємодіють за допомогою _посилання_, коли їх встановлюють рівними один одному. Коли ви призначаєте посилання з однієї змінної на іншу, ви робите _копію_ цього посилання. (зверніть увагу, що вони не мають _однакового_ посилання!)
Ми лише змінюємо значення змінної `person`, а не перший елемент у масиві, оскільки цей елемент має інше (скопійоване) посилання на об’єкт.Перший елемент у `members` все ще містить своє посилання на вихідний об’єкт. Коли ми виводимо у консоль масив `members`, перший елемент усе ще містить значення об'єкта, який і показується у консолі.
0 commit comments