Skip to content

Commit 0b1d9c5

Browse files
committed
[TM-15.12/st-compl] training-module
Solving 5 tasks. Working with "var, try/catch{}, arguments, {...rest}". Worth noting: - basic training (just what.. need). FS-dev: B-3 / JS basic
1 parent 3267b73 commit 0b1d9c5

File tree

1 file changed

+128
-0
lines changed
  • full-stack-dev/3-js-basic/15-scope-chain-this/15-12-training-module

1 file changed

+128
-0
lines changed
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
'use strict';
2+
3+
// Задание 1:
4+
// Напишите логику, которая демонстрирует работу цепочки областей видимости (scope chain) с вложенными функциями.
5+
6+
const globalVar = 'global-value';
7+
8+
function outerFunction() {
9+
const outerVar = 'outer-value';
10+
innerFunction();
11+
12+
function innerFunction() {
13+
const innerVar = 'inner-value';
14+
15+
console.log(innerVar); // "inner-value"
16+
console.log(outerVar); // "outer-value"
17+
console.log(globalVar); // "global-value"
18+
}
19+
}
20+
21+
outerFunction();
22+
23+
// Задание 2:
24+
// Напишите логику, которая демонстрирует поведение переменных `var`, `let` и `const` в строгом режиме (strict mode).
25+
26+
function demonstrateStrictMode() {
27+
if (true) {
28+
let block_let = 10;
29+
const block_const = 20;
30+
var function_var = 30;
31+
}
32+
33+
try {
34+
console.log(block_let);
35+
} catch (e) {
36+
console.log('Переменная let недоступна вне блока');
37+
}
38+
39+
try {
40+
console.log(block_const);
41+
} catch (e) {
42+
console.log('Переменная const недоступна вне блока');
43+
}
44+
45+
console.log(function_var); // 30
46+
47+
try {
48+
stray = 5;
49+
} catch (e) {
50+
console.log('В строгом режиме присвоение без объявления вызовет ошибку');
51+
}
52+
}
53+
54+
demonstrateStrictMode();
55+
56+
try {
57+
console.log(function_var);
58+
} catch (e) {
59+
console.log('Переменная function_var недоступна вне функции');
60+
}
61+
62+
// Задание 3:
63+
// Напишите логику, которая демонстрирует поведение переменных `let` и `const` в блочной области видимости внутри функции.
64+
65+
function demonstrateBlockScope() {
66+
if (true) {
67+
let value = 100;
68+
const message = 'первый блок';
69+
70+
console.log(value); // 100
71+
console.log(message); // "первый блок"
72+
}
73+
74+
if (true) {
75+
let value = 200;
76+
const message = 'второй блок';
77+
78+
console.log(value); // 200
79+
console.log(message); // "второй блок"
80+
}
81+
}
82+
83+
demonstrateBlockScope();
84+
85+
// Задание 4:
86+
// Напишите логику, которая демонстрирует поведение объекта `arguments` в обычных функциях и его недоступность в стрелочных функциях.
87+
88+
function ordinaryFunc() {
89+
console.log(`Обычная функция - количество аргументов: ${arguments.length}`); // "Обычная функция - количество аргументов: 2"
90+
console.log(`Обычная функция - первый аргумент: ${arguments[0]}`); // "Обычная функция - первый аргумент: hello"
91+
console.log(`Обычная функция - второй аргумент: ${arguments[1]}`); // "Обычная функция - второй аргумент: world"
92+
}
93+
94+
ordinaryFunc('hello', 'world');
95+
96+
const arrowFunc = (...args) => {
97+
console.log(`Стрелочная функция - аргументы через rest: [${args}]`); // "Стрелочная функция - аргументы через rest: [10,20,30]"
98+
console.log(`Стрелочная функция - количество аргументов: ${args.length}`); // "Стрелочная функция - количество аргументов: 3"
99+
};
100+
101+
arrowFunc(10, 20, 30);
102+
103+
// Задание 5:
104+
// Создайте программу, которая демонстрирует поведение переменных `var`, `let` и `const` при поднятии (hoisting).
105+
106+
console.log('--- Hoisting with var ---');
107+
console.log('Переменная var до объявления:', hoistedVar);
108+
var hoistedVar = 42;
109+
console.log('Переменная var после инициализации:', hoistedVar);
110+
111+
console.log('\n--- Temporal Dead Zone with let ---');
112+
try {
113+
console.log(hoistedLet);
114+
} catch (e) {
115+
console.log('Ошибка при обращении к let до объявления: ReferenceError');
116+
}
117+
118+
let hoistedLet = 15;
119+
console.log('Переменная let после объявления:', hoistedLet);
120+
121+
console.log('\n--- Temporal Dead Zone with const ---');
122+
try {
123+
console.log(hoistedConst);
124+
} catch (e) {
125+
console.log('Ошибка при обращении к const до объявления: ReferenceError');
126+
}
127+
const hoistedConst = 30;
128+
console.log('Переменная const после объявления:', hoistedConst);

0 commit comments

Comments
 (0)