Skip to content

Commit 4b8b168

Browse files
committed
renovations
1 parent 223dd88 commit 4b8b168

42 files changed

Lines changed: 561 additions & 489 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1-js/2-first-steps/15-switch/article.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Конструкция `switch` заменяет собой сразу несколько `if`.
44

5-
Это -- более наглядный способ сравнить выражение сразу с несколькими вариантами.
5+
Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.
66
[cut]
77
## Синтаксис
88

@@ -44,7 +44,7 @@ switch(x) {
4444

4545
```js
4646
//+ run
47-
var a = 2+2;
47+
var a = 2 + 2;
4848

4949
switch (a) {
5050
case 3:
@@ -63,11 +63,13 @@ switch (a) {
6363
}
6464
```
6565

66-
Будет выведено только одно значение, соответствующее `4`. После чего `break` прервёт выполнение.
66+
Здесь оператор `switch` последовательно сравнит `a` со всеми вариантами из `case`.
6767

68-
**Если его не прервать -- оно пойдёт далее, при этом остальные проверки игнорируются.**
68+
Сначала `3`, затем -- так как нет совпадения -- `4`. Совпадение найдено, будет выполнен этот вариант, со строки `alert('В точку!')` и далее, до ближайшего `break`, который прервёт выполнение.
6969

70-
Например:
70+
**Если `break` нет, то выполнение пойдёт ниже по следующим `case`, при этом остальные проверки игнорируются.**
71+
72+
Пример без `break`:
7173

7274
```js
7375
//+ run
@@ -87,15 +89,15 @@ switch (a) {
8789
}
8890
```
8991

90-
В примере выше последовательно выполнятся три `alert`.
92+
В примере выше последовательно выполнятся три `alert`:
9193

9294
```js
9395
alert('В точку!');
9496
alert('Перебор');
9597
alert('Я таких значений не знаю');
9698
```
9799

98-
**В `case` могут быть любые выражения**, в том числе включающие в себя переменные и функции.
100+
В `case` могут быть любые выражения, в том числе включающие в себя переменные и функции.
99101

100102
Например:
101103

@@ -165,21 +167,19 @@ switch(arg) {
165167
case 3:
166168
alert('Никогда не выполнится');
167169

168-
case null:
169-
alert('Отмена');
170-
break;
171-
172170
default:
173171
alert('Неизвестное значение: ' + arg)
174172
}
175173
```
176174

177-
Что оно выведет при вводе чисел 0, 1, 2, 3? Подумайте и *потом* читайте дальше...
175+
Что оно выведет при вводе числа 0? Числа 1? 2? 3?
176+
177+
Подумайте, выпишите свои ответы, исходя из текущего понимания работы `switch` и *потом* читайте дальше...
178178

179179
<ul>
180-
<li>При вводе `0` или `1` выполнится первый `alert`, далее выполнение продолжится вниз до первого `break` и выведет второй `alert('Два')`.</li>
181-
<li>При вводе `2`, `switch` перейдет к `case '2'` и выведет `Два`.</li>
182-
<li>**При вводе `3`, `switch` перейдет на `default`.** Это потому, что `prompt` возвращает строку `'3'`, а не число. Типы разные. `Switch` использует строгое равенство `===`, так что совпадения не будет.</li>
183-
<li>При отмене сработает `case null`.</li>
180+
<li>При вводе `0` выполнится первый `alert`, далее выполнение продолжится вниз до первого `break` и выведет второй `alert('Два')`. Итого, два вывода `alert`.</li>
181+
<li>При вводе `1` произойдёт то же самое.</li>
182+
<li>При вводе `2`, `switch` перейдет к `case '2'`, и сработает единственный `alert('Два')`.</li>
183+
<li>**При вводе `3`, `switch` перейдет на `default`.** Это потому, что `prompt` возвращает строку `'3'`, а не число. Типы разные. Оператор `switch` предполагает строгое равенство `===`, так что совпадения не будет.</li>
184184
</ul>
185185

1-js/2-first-steps/16-function-basics/article.md

Lines changed: 11 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,14 @@ alert(message); // <-- будет ошибка, т.к. переменная ви
6565

6666
```js
6767
function count() {
68+
// переменные i,j не будут уничтожены по окончании цикла
6869
for (*!*var*/!* i=0; i<3; i++) {
6970
*!*var*/!* j = i * 2;
7071
}
7172

7273
*!*
73-
alert(i); // i=3, на этом значении цикл остановился
74-
alert(j); // j=4, последнее значение, на котором цикл сработал, было i=2
74+
alert(i); // i=3, последнее значение i, при нём цикл перестал работать
75+
alert(j); // j=4, последнее значение j, которое вычислил цикл
7576
*/!*
7677
}
7778
```
@@ -114,13 +115,12 @@ showMessage(); // Привет, я Вася
114115

115116
```js
116117
//+ run
117-
var *!*userName*/!* = 'Вася';
118+
var userName = 'Вася';
118119

119120
function showMessage() {
120-
*!*
121121
userName = 'Петя'; // (1) присвоение во внешнюю переменную
122-
*/!*
123-
var message = 'Привет, я ' + *!*userName*/!*;
122+
123+
var message = 'Привет, я ' + userName;
124124
alert(message);
125125
}
126126

@@ -133,13 +133,11 @@ alert(userName); // Петя, значение внешней переменно
133133

134134
Конечно, если бы внутри функции, в строке `(1)`, была бы объявлена своя локальная переменная `var userName`, то все обращения использовали бы её, и внешняя переменная осталась бы неизменной.
135135

136-
[summary]
137136
**Переменные, объявленные на уровне всего скрипта, называют *"глобальными переменными"*.**
138137

139-
Делайте глобальными только те переменные, которые действительно имеют общее значение для вашего проекта.
138+
В примере выше переменная `userName` -- глобальная.
140139

141-
Пусть каждая функция работает "в своей песочнице".
142-
[/summary]
140+
Делайте глобальными только те переменные, которые действительно имеют общее значение для вашего проекта, а нужные для решения конкретной задачи -- пусть будут локальными в соответствующей функции.
143141

144142

145143
[warn header="Внимание: неявное объявление глобальных переменных!"]
@@ -167,7 +165,7 @@ alert(message); // Привет
167165

168166
Здесь опасность даже не в автоматическом создании переменной, а в том, что глобальные переменные должны использоваться тогда, когда действительно нужны "общескриптовые" параметры.
169167

170-
Забыли `var` в одном месте, потом в другом -- в результате одна функция неожиданно поменяла глобальную переменную, которую использует другая. Возможна ошибка и потеря времени на поиск проблемы.
168+
Забыли `var` в одном месте, потом в другом -- в результате одна функция неожиданно поменяла глобальную переменную, которую использует другая. И поди разберись, кто и когда её поменял, не самая приятная ошибка для отладки.
171169
[/warn]
172170

173171
В будущем, когда мы лучше познакомимся с основами JavaScript, в главе [](/closures), мы более детально рассмотрим внутренние механизмы работы переменных и функций.
@@ -201,7 +199,7 @@ showMessage('Маша', 'Как дела?');
201199
//+ run
202200
function showMessage(from, text) {
203201
*!*
204-
from = '**' + from + '**'; // меняем локальную переменную (1)
202+
from = '**' + from + '**'; // меняем локальную переменную from
205203
*/!*
206204
alert(from + ': ' + text);
207205
}
@@ -210,32 +208,9 @@ var from = "Маша";
210208

211209
showMessage(from, "Привет");
212210

213-
alert(from); // "Маша", без изменений, так как в строке (1) была изменена копия значения
211+
alert(from); // старое значение from без изменений, в функции была изменена копия
214212
```
215213
216-
Здесь есть небольшая тонкость при работе с объектами. Как мы помним, в переменной хранится ссылка на объект. Поэтому функция, получив параметр-объект, работает с самим этим объектом:
217-
218-
Например, в коде ниже функция по ссылке меняет содержимое объекта `user`:
219-
220-
```js
221-
//+ run
222-
function makeAdmin(user) {
223-
user.isAdmin = true;
224-
}
225-
226-
var user = { name: "Вася" };
227-
228-
makeAdmin(user);
229-
alert(user.isAdmin); // true
230-
```
231-
232-
## Стиль объявления функций
233-
234-
В объявлении функции есть правила для расстановки пробелов. Они отмечены стрелочками:
235-
236-
<img src="style.png">
237-
238-
Конечно, вы можете ставить пробелы и по-другому, но эти правила используются в большинстве JavaScript-фреймворков.
239214
## Аргументы по умолчанию
240215
241216
Функцию можно вызвать с любым количеством аргументов.

0 commit comments

Comments
 (0)