diff --git a/1-js/2-first-steps/1-hello-world/1-hello-alert/solution.md b/1-js/2-first-steps/1-hello-world/1-hello-alert/solution.md
index 95104042..b27e40d9 100644
--- a/1-js/2-first-steps/1-hello-world/1-hello-alert/solution.md
+++ b/1-js/2-first-steps/1-hello-world/1-hello-alert/solution.md
@@ -4,16 +4,19 @@
+
+
-
+
+
```
diff --git a/1-js/2-first-steps/1-hello-world/article.md b/1-js/2-first-steps/1-hello-world/article.md
index 50da17ba..ef740038 100644
--- a/1-js/2-first-steps/1-hello-world/article.md
+++ b/1-js/2-first-steps/1-hello-world/article.md
@@ -16,23 +16,25 @@
+
+
Начало документа...
-
*!*
*/!*
...Конец документа
+
```
@@ -88,6 +90,7 @@
Выглядит это примерно так:
```html
+
diff --git a/1-js/2-first-steps/10-bitwise-operators/4-bit-rounding/task.md b/1-js/2-first-steps/10-bitwise-operators/4-bit-rounding/task.md
index a0a19eac..13407c30 100644
--- a/1-js/2-first-steps/10-bitwise-operators/4-bit-rounding/task.md
+++ b/1-js/2-first-steps/10-bitwise-operators/4-bit-rounding/task.md
@@ -6,7 +6,7 @@
```js
//+ run
-alert( 123456789 ^ 0 ); // 123456789
+alert( 123456789 ^ 0 ); // 123456789
alert( 12345678912345 ^ 0 ); // 1942903641
```
diff --git a/1-js/2-first-steps/10-bitwise-operators/article.md b/1-js/2-first-steps/10-bitwise-operators/article.md
index 77d348a0..6b6040fd 100644
--- a/1-js/2-first-steps/10-bitwise-operators/article.md
+++ b/1-js/2-first-steps/10-bitwise-operators/article.md
@@ -22,6 +22,7 @@
Примеры представления чисел в двоичной системе:
```js
+//+ no-beautify
a = 0; // 00000000000000000000000000000000
a = 1; // 00000000000000000000000000000001
a = 2; // 00000000000000000000000000000010
@@ -135,13 +136,13 @@ a = 255;// 00000000000000000000000011111111
```js
//+ run
-var access = parseInt("11000", 2); // получаем число из строки
+var access = parseInt("11000", 2); // получаем число из строки
-alert(access); // 24, число с таким 2-ным представлением
+alert( access ); // 24, число с таким 2-ным представлением
var access2 = access.toString(2); // обратно двоичную строку из числа
-alert(access2); // 11000
+alert( access2 ); // 11000
```
Без них перевод в двоичную систему и обратно был бы куда менее удобен.
@@ -167,6 +168,7 @@ alert(access2); // 11000
Пример:
```js
+//+ no-beautify
9 (по осн. 10)
= 00000000000000000000000000001001 (по осн. 2)
14 (по осн. 10)
@@ -194,6 +196,7 @@ alert(access2); // 11000
Пример:
```js
+//+ no-beautify
9 (по осн. 10)
= 00000000000000000000000000001001 (по осн. 2)
14 (по осн. 10)
@@ -225,6 +228,7 @@ alert(access2); // 11000
Пример:
```js
+//+ no-beautify
9 (по осн. 10)
= 00000000000000000000000000001001 (по осн. 2)
14 (по осн. 10)
@@ -253,6 +257,7 @@ alert(access2); // 11000
Например, пусть в `data` очередное число равно `9`, а ключ `key` равен `1220461917`.
```js
+//+ no-beautify
Данные: 9 в двоичном виде
00000000000000000000000000001001
@@ -273,6 +278,7 @@ alert(access2); // 11000
В нашем случае:
```js
+//+ no-beautify
Полученная шифровка в двоичной системе:
9 ^ key = 1220461908
01001000101111101100010101010100
@@ -305,6 +311,7 @@ alert(access2); // 11000
Пример:
```js
+//+ no-beautify
9 (по осн. 10)
= 00000000000000000000000000001001 (по осн. 2)
--------------------------------
@@ -319,8 +326,8 @@ alert(access2); // 11000
```js
//+ run
-alert(~3); // -4
-alert(~-1); // 0
+alert( ~3 ); // -4
+alert( ~-1 ); // 0
```
### << (Битовый сдвиг влево)
@@ -332,6 +339,7 @@ alert(~-1); // 0
Например, `9 << 2` даст `36`:
```js
+//+ no-beautify
9 (по осн.10)
= 00000000000000000000000000001001 (по осн.2)
@@ -356,7 +364,7 @@ alert( 3 << 3 ); // 24, умножение на 2 три раза
Конечно, следует иметь в виду, что побитовые операторы работают только с 32-битными числами, поэтому верхний порог такого "умножения" ограничен:
```js
-//+ run
+//+ run no-beautify
*!*
alert(10000000000 << 1); // -1474836480, отброшен крайний-левый бит
*/!*
@@ -376,6 +384,7 @@ alert(10000000000 * 2); // 20000000000, обычное умножение
Например, `9 >> 2` даст 2
:
```js
+//+ no-beautify
9 (по осн.10)
= 00000000000000000000000000001001 (по осн.2)
--------------------------------
@@ -389,6 +398,7 @@ alert(10000000000 * 2); // 20000000000, обычное умножение
Аналогично, `-9 >> 2` даст `-3`:
```js
+//+ no-beautify
-9 (по осн.10)
= 11111111111111111111111111110111 (по осн.2)
--------------------------------
@@ -422,6 +432,7 @@ alert( 100 >> 3 ); // 12, деление на 2 три раза, целая ча
Для отрицательных чисел -- результат работы разный. Например, `-9 >>> 2` даст `1073741821`, в отличие от `-9 >> 2` (дает `-3`):
```js
+//+ no-beautify
-9 (по осн.10)
= 11111111111111111111111111110111 (по осн.2)
--------------------------------
@@ -559,6 +570,7 @@ alert( 100 >> 3 ); // 12, деление на 2 три раза, целая ча
Как правило, доступы задаются в виде констант:
```js
+//+ no-beautify
var ACCESS_ADMIN = 1; // 00001
var ACCESS_GOODS_EDIT = 2; // 00010
var ACCESS_GOODS_VIEW = 4; // 00100
@@ -592,7 +604,7 @@ alert(editor & ACCESS_ARTICLE_EDIT); // 8, доступ есть
```js
var check = ACCESS_GOODS_VIEW | ACCESS_GOODS_EDIT; // 6, 00110
-alert(admin & check); // не 0, значит есть доступ к просмотру ИЛИ изменению
+alert( admin & check ); // не 0, значит есть доступ к просмотру ИЛИ изменению
```
*Битовой маской* называют как раз комбинацию двоичных значений (`check` в примере выше), которая используется для проверки и выборки единиц на нужных позициях.
@@ -626,14 +638,14 @@ alert( ~~12.345 ); // 12
```js
//+ run
-alert( 12.345^0 ); // 12
+alert( 12.345 ^ 0 ); // 12
```
Последнее даже более удобно, поскольку отлично читается:
```js
//+ run
-alert( 12.3 * 14.5 ^ 0); // (=178) "12.3 умножить на 14.5 *!*и округлить*/!*"
+alert(12.3 * 14.5 ^ 0); // (=178) "12.3 умножить на 14.5 *!*и округлить*/!*"
```
У побитовых операторов достаточно низкий приоритет, он меньше чем у остальной арифметики:
@@ -655,8 +667,8 @@ alert( 1.1 + 1.2 ^ 0 ); // 2, сложение выполнится раньше
//+ run
var n = 5;
-if (~n) { // сработает, т.к. ~n = -(5+1) = -6
- alert("n не -1"); // выведет!
+if (~n) { // сработает, т.к. ~n = -(5+1) = -6
+ alert( "n не -1" ); // выведет!
}
```
@@ -666,8 +678,8 @@ if (~n) { // сработает, т.к. ~n = -(5+1) = -6
//+ run
var n = -1;
-if (~n) { // не сработает, т.к. ~n = -(-1+1) = 0
- alert("...ничего не выведет...");
+if (~n) { // не сработает, т.к. ~n = -(-1+1) = 0
+ alert( "...ничего не выведет..." );
}
```
@@ -678,7 +690,7 @@ if (~n) { // не сработает, т.к. ~n = -(-1+1) = 0
var str = "Проверка";
if (~str.indexOf("верка")) { // Сочетание "if (~...indexOf)" читается как "если найдено"
- alert('найдено!');
+ alert( 'найдено!' );
}
```
diff --git a/1-js/2-first-steps/11-uibasic/1-simple-page/solution.md b/1-js/2-first-steps/11-uibasic/1-simple-page/solution.md
index 53bc8af2..a70b07e0 100644
--- a/1-js/2-first-steps/11-uibasic/1-simple-page/solution.md
+++ b/1-js/2-first-steps/11-uibasic/1-simple-page/solution.md
@@ -3,7 +3,7 @@ JS-код:
```js
//+ demo run
var name = prompt("Ваше имя?", "");
-alert(name);
+alert( name );
```
Полная страница:
@@ -11,17 +11,20 @@ alert(name);
```html
+
+
-
+
+
```
diff --git a/1-js/2-first-steps/11-uibasic/article.md b/1-js/2-first-steps/11-uibasic/article.md
index e83f9c87..357967e6 100644
--- a/1-js/2-first-steps/11-uibasic/article.md
+++ b/1-js/2-first-steps/11-uibasic/article.md
@@ -15,7 +15,7 @@ alert(сообщение)
```js
//+ run
-alert("Привет");
+alert( "Привет" );
```
Окно сообщения, которое выводится, является *модальным окном*. Слово "модальное" означает, что посетитель не может взаимодействовать со страницей, нажимать другие кнопки и т.п., пока не разберется с окном. В данном случае - пока не нажмет на "OK".
@@ -25,6 +25,7 @@ alert("Привет");
Функция prompt принимает два аргумента:
```js
+//+ no-beautify
result = prompt(title, default);
```
@@ -87,7 +88,7 @@ result = confirm(question);
//+ run
var isAdmin = confirm("Вы - администратор?");
-alert(isAdmin);
+alert( isAdmin );
```
## Особенности встроенных функций
diff --git a/1-js/2-first-steps/12-ifelse/1-if-zero-string/solution.md b/1-js/2-first-steps/12-ifelse/1-if-zero-string/solution.md
index 0e71c2b9..92098c3e 100644
--- a/1-js/2-first-steps/12-ifelse/1-if-zero-string/solution.md
+++ b/1-js/2-first-steps/12-ifelse/1-if-zero-string/solution.md
@@ -7,7 +7,7 @@
```js
//+ run
if ("0") {
- alert('Привет');
+ alert( 'Привет' );
}
```
diff --git a/1-js/2-first-steps/12-ifelse/1-if-zero-string/task.md b/1-js/2-first-steps/12-ifelse/1-if-zero-string/task.md
index 2b1bd3a7..27ce5aee 100644
--- a/1-js/2-first-steps/12-ifelse/1-if-zero-string/task.md
+++ b/1-js/2-first-steps/12-ifelse/1-if-zero-string/task.md
@@ -6,7 +6,7 @@
```js
if ("0") {
- alert('Привет');
+ alert( 'Привет' );
}
```
diff --git a/1-js/2-first-steps/12-ifelse/3-sign/solution.md b/1-js/2-first-steps/12-ifelse/3-sign/solution.md
index 61af24e2..df54e347 100644
--- a/1-js/2-first-steps/12-ifelse/3-sign/solution.md
+++ b/1-js/2-first-steps/12-ifelse/3-sign/solution.md
@@ -2,14 +2,14 @@
```js
//+ run
-var value = prompt('Введите число', 0);
+var value = prompt('Введите число', 0);
if (value > 0) {
- alert(1);
+ alert( 1 );
} else if (value < 0) {
- alert(-1);
+ alert( -1 );
} else {
- alert(0);
+ alert( 0 );
}
```
diff --git a/1-js/2-first-steps/12-ifelse/4-check-login/solution.md b/1-js/2-first-steps/12-ifelse/4-check-login/solution.md
index edafff62..edcdbb50 100644
--- a/1-js/2-first-steps/12-ifelse/4-check-login/solution.md
+++ b/1-js/2-first-steps/12-ifelse/4-check-login/solution.md
@@ -4,24 +4,24 @@
//+ run demo
var userName = prompt('Кто пришёл?', '');
-if ( userName == 'Админ' ) {
+if (userName == 'Админ') {
var pass = prompt('Пароль?', '');
- if ( pass == 'Чёрный Властелин' ) {
- alert('Добро пожаловать!');
- } else if ( pass == null ) { // (*)
- alert('Вход отменён');
+ if (pass == 'Чёрный Властелин') {
+ alert( 'Добро пожаловать!' );
+ } else if (pass == null) { // (*)
+ alert( 'Вход отменён' );
} else {
- alert('Пароль неверен');
+ alert( 'Пароль неверен' );
}
-} else if ( userName == null ) { // (**)
- alert('Вход отменён');
+} else if (userName == null) { // (**)
+ alert( 'Вход отменён' );
} else {
- alert('Я вас не знаю');
+ alert( 'Я вас не знаю' );
}
```
diff --git a/1-js/2-first-steps/12-ifelse/article.md b/1-js/2-first-steps/12-ifelse/article.md
index 9e9a9502..4b33eb99 100644
--- a/1-js/2-first-steps/12-ifelse/article.md
+++ b/1-js/2-first-steps/12-ifelse/article.md
@@ -8,7 +8,7 @@
//+ run
var year = prompt('В каком году появилась спецификация ECMA-262 5.1?', '');
-if (year != 2011) alert('А вот и неправильно!');
+if (year != 2011) alert( 'А вот и неправильно!' );
```
## Оператор if
@@ -19,8 +19,8 @@ if (year != 2011) alert('А вот и неправильно!');
```js
if (year != 2011) {
- alert('А вот..');
- alert('..и неправильно!');
+ alert( 'А вот..' );
+ alert( '..и неправильно!' );
}
```
@@ -58,7 +58,7 @@ if (1) { // 1 преобразуется к true
Можно и просто передать уже готовое логическое значение, к примеру, заранее вычисленное в переменной:
```js
-var cond = (year != 2011); // true/false
+var cond = (year != 2011); // true/false
if (cond) {
...
@@ -74,9 +74,9 @@ if (cond) {
var year = prompt('Введите год появления стандарта ECMA-262 5.1', '');
if (year == 2011) {
- alert('Да вы знаток!');
+ alert( 'Да вы знаток!' );
} else {
- alert('А вот и неправильно!'); // любое значение, кроме 2011
+ alert( 'А вот и неправильно!' ); // любое значение, кроме 2011
}
```
@@ -89,11 +89,11 @@ if (year == 2011) {
var year = prompt('В каком году появилась спецификация ECMA-262 5.1?', '');
if (year < 2011) {
- alert('Это слишком рано..');
+ alert( 'Это слишком рано..' );
} else if (year > 2011) {
- alert('Это поздновато..');
+ alert( 'Это поздновато..' );
} else {
- alert('Да, точно в этом году!');
+ alert( 'Да, точно в этом году!' );
}
```
@@ -104,7 +104,7 @@ if (year < 2011) {
Иногда нужно в зависимости от условия присвоить переменную. Например:
```js
-//+ run
+//+ run no-beautify
var access;
var age = prompt('Сколько вам лет?', '');
@@ -164,12 +164,12 @@ access = age > 14;
//+ run
var age = prompt('возраст?', 18);
-var message = (age < 3) ? 'Здравствуй, малыш!' :
- (age < 18) ? 'Привет!' :
- (age < 100) ? 'Здравствуйте!' :
+var message = (age < 3) ? 'Здравствуй, малыш!' :
+ (age < 18) ? 'Привет!' :
+ (age < 100) ? 'Здравствуйте!' :
'Какой необычный возраст!';
-alert(message);
+alert( message );
```
Поначалу может быть сложно понять, что происходит. Однако, внимательно приглядевшись, мы замечаем, что это обычная последовательная проверка!
@@ -195,7 +195,7 @@ if (age < 3) {
Иногда оператор вопросительный знак `'?'` используют как замену `if`:
```js
-//+ run
+//+ run no-beautify
var company = prompt('Какая компания создала JavaScript?', '');
*!*
@@ -215,7 +215,7 @@ var company = prompt('Какая компания создала JavaScript?', '
Вот, для сравнения, то же самое с `if`:
```js
-//+ run
+//+ run no-beautify
var company = prompt('Какая компания создала JavaScript?', '');
*!*
diff --git a/1-js/2-first-steps/13-logical-ops/6-check-if-out-range/solution.md b/1-js/2-first-steps/13-logical-ops/6-check-if-out-range/solution.md
index a901721c..3d2eab1a 100644
--- a/1-js/2-first-steps/13-logical-ops/6-check-if-out-range/solution.md
+++ b/1-js/2-first-steps/13-logical-ops/6-check-if-out-range/solution.md
@@ -1,7 +1,7 @@
Первый вариант:
```js
-if ( !(age >= 14 && age <= 90) )
+if (!(age >= 14 && age <= 90))
```
Второй вариант:
diff --git a/1-js/2-first-steps/13-logical-ops/7-if-question/solution.md b/1-js/2-first-steps/13-logical-ops/7-if-question/solution.md
index 90f7a877..f1b83dab 100644
--- a/1-js/2-first-steps/13-logical-ops/7-if-question/solution.md
+++ b/1-js/2-first-steps/13-logical-ops/7-if-question/solution.md
@@ -6,16 +6,16 @@
//+ run
// Выполнится
// Результат -1 || 0 = -1, в логическом контексте true
-if (-1 || 0) alert('первое');
+if (-1 || 0) alert( 'первое' );
// Не выполнится
// -1 && 0 = 0, в логическом контексте false
-if (-1 && 0) alert('второе');
+if (-1 && 0) alert( 'второе' );
// Выполнится
// оператор && имеет больший приоритет, чем ||
// так что -1 && 1 выполнится раньше
// вычисления: null || -1 && 1 -> null || 1 -> 1
-if (null || -1 && 1) alert('третье');
+if (null || -1 && 1) alert( 'третье' );
```
diff --git a/1-js/2-first-steps/13-logical-ops/7-if-question/task.md b/1-js/2-first-steps/13-logical-ops/7-if-question/task.md
index bbf094d8..ee7018b6 100644
--- a/1-js/2-first-steps/13-logical-ops/7-if-question/task.md
+++ b/1-js/2-first-steps/13-logical-ops/7-if-question/task.md
@@ -7,8 +7,8 @@
Какие конкретно значения будут результатами выражений в условиях `if(...)`?
```js
-if (-1 || 0) alert('первое');
-if (-1 && 0) alert('второе');
-if (null || -1 && 1) alert('третье');
+if (-1 || 0) alert( 'первое' );
+if (-1 && 0) alert( 'второе' );
+if (null || -1 && 1) alert( 'третье' );
```
diff --git a/1-js/2-first-steps/13-logical-ops/article.md b/1-js/2-first-steps/13-logical-ops/article.md
index 0f7fa965..27c01996 100644
--- a/1-js/2-first-steps/13-logical-ops/article.md
+++ b/1-js/2-first-steps/13-logical-ops/article.md
@@ -19,18 +19,18 @@ result = a || b;
```js
//+ run
-alert( true || true ); // true
+alert( true || true ); // true
alert( false || true ); // true
-alert( true || false); // true
-alert( false || false); // false
+alert( true || false ); // true
+alert( false || false ); // false
```
Если значение не логического типа -- то оно к нему приводится в целях вычислений. Например, число `1` будет воспринято как `true`, а `0` -- как `false`:
```js
//+ run
-if ( 1 || 0 ) { // сработает как if( true || false )
- alert('верно');
+if (1 || 0) { // сработает как if( true || false )
+ alert( 'верно' );
}
```
@@ -41,9 +41,9 @@ if ( 1 || 0 ) { // сработает как if( true || false )
var hour = 9;
*!*
-if (hour < 10 || hour > 18) {
+if (hour < 10 || hour > 18) {
*/!*
- alert('Офис до 10 или после 18 закрыт');
+ alert( 'Офис до 10 или после 18 закрыт' );
}
```
@@ -51,10 +51,11 @@ if (hour < 10 || hour > 18) {
```js
//+ run
-var hour = 12, isWeekend = true;
+var hour = 12,
+ isWeekend = true;
if (hour < 10 || hour > 18 || isWeekend) {
- alert('Офис до 10 или после 18 или в выходной закрыт');
+ alert( 'Офис до 10 или после 18 или в выходной закрыт' );
}
```
@@ -69,7 +70,7 @@ JavaScript вычисляет несколько ИЛИ слева направ
При запуске примера ниже присвоение `x` не произойдёт:
```js
-//+ run
+//+ run no-beautify
var x;
*!*true*/!* || (x = 1);
@@ -80,7 +81,7 @@ alert(x); // undefined, x не присвоен
...А в примере ниже первый аргумент -- `false`, так что ИЛИ попытается вычислить второй, запустив тем самым присваивание:
```js
-//+ run
+//+ run no-beautify
var x;
*!*false*/!* || (x = 1);
@@ -99,7 +100,7 @@ alert(x); // 1
```js
//+ run
alert( 1 || 0 ); // 1
-alert( true || 'неважно что'); // true
+alert( true || 'неважно что' ); // true
alert( null || 1 ); // 1
alert( undefined || 0 ); // 0
@@ -110,7 +111,7 @@ alert( undefined || 0 ); // 0
```js
//+ run
var undef; // переменная не присвоена, т.е. равна undefined
-var zero = 0;
+var zero = 0;
var emptyStr = "";
var msg = "Привет!";
@@ -118,15 +119,14 @@ var msg = "Привет!";
var result = undef || zero || emptyStr || msg || 0;
*/!*
-alert(result); // выведет "Привет!" - первое значение, которое является true
+alert( result ); // выведет "Привет!" - первое значение, которое является true
```
Если все значения "ложные", то `||` возвратит последнее из них:
```js
//+ run
-
-alert(undefined || '' || false || 0); // 0
+alert( undefined || '' || false || 0 ); // 0
```
[summary]
@@ -146,20 +146,21 @@ result = a && b;
```js
//+ run
-alert( true && true ); // true
+alert( true && true ); // true
alert( false && true ); // false
-alert( true && false); // false
-alert( false && false); // false
+alert( true && false ); // false
+alert( false && false ); // false
```
Пример c `if`:
```js
//+ run
-var hour = 12, minute = 30;
+var hour = 12,
+ minute = 30;
if (hour == 12 && minute == 30) {
- alert('Время 12:30');
+ alert( 'Время 12:30' );
}
```
@@ -167,8 +168,8 @@ if (hour == 12 && minute == 30) {
```js
//+ run
-if ( 1 && 0 ) { // вычислится как true && false
- alert('не сработает, т.к. условие ложно');
+if (1 && 0) { // вычислится как true && false
+ alert( 'не сработает, т.к. условие ложно' );
}
```
@@ -182,22 +183,22 @@ if ( 1 && 0 ) { // вычислится как true && false
//+ run
// Первый аргумент - true,
// Поэтому возвращается второй аргумент
-alert(1 && 0); // 0
-alert(1 && 5); // 5
+alert( 1 && 0 ); // 0
+alert( 1 && 5 ); // 5
// Первый аргумент - false,
// Он и возвращается, а второй аргумент игнорируется
-alert(null && 5); // null
-alert(0 && "не важно"); // 0
+alert( null && 5 ); // null
+alert( 0 && "не важно" ); // 0
```
Можно передать и несколько значений подряд, при этом возвратится первое "ложное" (на котором остановились вычисления), а если его нет -- то последнее:
```js
//+ run
-alert(1 && 2 && null && 3); // null
+alert( 1 && 2 && null && 3 ); // null
-alert(1 && 2 && 3); // 3
+alert( 1 && 2 && 3 ); // 3
```
[summary]
@@ -211,7 +212,7 @@ alert(1 && 2 && 3); // 3
```js
//+ run
-alert(5 || 1 && 0); // 5
+alert( 5 || 1 && 0 ); // 5
```
[/smart]
@@ -223,7 +224,7 @@ alert(5 || 1 && 0); // 5
//+ run
var x = 1;
-(x > 0) && alert('Больше');
+(x > 0) && alert( 'Больше' );
```
Действие в правой части `&&` выполнится только в том случае, если до него дойдут вычисления. То есть, `alert` сработает, если в левой части будет `true`.
@@ -235,7 +236,7 @@ var x = 1;
var x = 1;
if (x > 0) {
- alert('Больше');
+ alert( 'Больше' );
}
```
@@ -261,15 +262,15 @@ var result = !value;
```js
//+ run
-alert( !true ) // false
-alert( !0 ) // true
+alert(!true) // false
+alert(!0) // true
```
**В частности, двойное НЕ используются для преобразования значений к логическому типу:**
```js
//+ run
-alert( !!"строка" ) // true
-alert( !!null ) // false
+alert(!!"строка") // true
+alert(!!null) // false
```
diff --git a/1-js/2-first-steps/14-types-conversion/1-primitive-conversions-questions/solution.md b/1-js/2-first-steps/14-types-conversion/1-primitive-conversions-questions/solution.md
index f344d41d..8367d6cf 100644
--- a/1-js/2-first-steps/14-types-conversion/1-primitive-conversions-questions/solution.md
+++ b/1-js/2-first-steps/14-types-conversion/1-primitive-conversions-questions/solution.md
@@ -1,17 +1,14 @@
```js
-"" + 1 + 0 = "10" // (1)
-"" - 1 + 0 = -1 // (2)
+"" + 1 + 0 = "10" // (1)
+"" - 1 + 0 = -1 // (2)
true + false = 1
-6 / "3" = 2
-"2" * "3" = 6
+6 / "3" = 2 "2" * "3" = 6
4 + 5 + "px" = "9px"
"$" + 4 + 5
= "$45"
-"4" - 2
= 2
-"4px" - 2
= NaN
-7 / 0
= Infinity
-" -9\n" + 5 = " -9\n5"
+"4" - 2
= 2 "4px" - 2
= NaN
+7 / 0
= Infinity " -9\n" + 5 = " -9\n5"
" -9\n" - 5 = -14
5 && 2
= 2
2 && 5
= 5
diff --git a/1-js/2-first-steps/14-types-conversion/1-primitive-conversions-questions/task.md b/1-js/2-first-steps/14-types-conversion/1-primitive-conversions-questions/task.md
index f4b4928e..17f99243 100644
--- a/1-js/2-first-steps/14-types-conversion/1-primitive-conversions-questions/task.md
+++ b/1-js/2-first-steps/14-types-conversion/1-primitive-conversions-questions/task.md
@@ -5,18 +5,13 @@
Подумайте, какой результат будет у выражений ниже. Тут не только преобразования типов. Когда закончите -- сверьтесь с решением.
```js
-"" + 1 + 0
-"" - 1 + 0
+"" + 1 + 0 "" - 1 + 0
true + false
6 / "3"
"2" * "3"
4 + 5 + "px"
-"$" + 4 + 5
-"4" - 2
-"4px" - 2
-7 / 0
-" -9\n" + 5
-" -9\n" - 5
+"$" + 4 + 5
"4" - 2
"4px" - 2
+7 / 0
" -9\n" + 5 " -9\n" - 5
5 && 2
2 && 5
5 || 0
diff --git a/1-js/2-first-steps/14-types-conversion/article.md b/1-js/2-first-steps/14-types-conversion/article.md
index 6cf8a89a..65e38666 100644
--- a/1-js/2-first-steps/14-types-conversion/article.md
+++ b/1-js/2-first-steps/14-types-conversion/article.md
@@ -20,7 +20,7 @@
//+ run
var a = true;
-alert(a); // "true"
+alert( a ); // "true"
```
Можно также осуществить преобразование явным вызовом `String(val)`:
@@ -37,7 +37,7 @@ alert( String(null) === "null" ); // true
```js
//+ run
alert( true + "test" ); // "truetest"
-alert( "123" + undefined); // "123undefined"
+alert( "123" + undefined ); // "123undefined"
```
## Численное преобразование
@@ -64,7 +64,7 @@ var a = Number("123"); // 123, тот же эффект
```js
//+ run
// после обрезания пробельных символов останется "123"
-alert( +" \n 123 \n \n"); // 123
+alert( +" \n 123 \n \n" ); // 123
```
Ещё примеры:
@@ -74,7 +74,7 @@ alert( +" \n 123 \n \n"); // 123
```js
//+ run
alert( +true ); // 1
-alert( +false); // 0
+alert( +false ); // 0
```
@@ -120,18 +120,18 @@ alert( "1" == true );
```js
//+ run
-alert(null >= 0); // true, т.к. null преобразуется к 0
-alert(null > 0); // false (не больше), т.к. null преобразуется к 0
-alert(null == 0 ); // false (и не равен!), т.к. == рассматривает null особо.
+alert( null >= 0 ); // true, т.к. null преобразуется к 0
+alert( null > 0 ); // false (не больше), т.к. null преобразуется к 0
+alert( null == 0 ); // false (и не равен!), т.к. == рассматривает null особо.
```
Значение `undefined` вообще "несравнимо":
```js
//+ run
-alert(undefined > 0); // false, т.к. undefined -> NaN
-alert(undefined == 0); // false, т.к. это undefined (без преобразования)
-alert(undefined < 0); // false, т.к. undefined -> NaN
+alert( undefined > 0 ); // false, т.к. undefined -> NaN
+alert( undefined == 0 ); // false, т.к. это undefined (без преобразования)
+alert( undefined < 0 ); // false, т.к. undefined -> NaN
```
**Для более очевидной работы кода и во избежание ошибок лучше не давать специальным значениям участвовать в сравнениях `> >= < <=`.**
@@ -178,15 +178,15 @@ alert( !!" " ); // любые непустые строки, даже из пр
```js
//+ run
-alert( 0 == "\n0\n" ); // true
+alert( 0 == "\n0\n" ); // true
```
...А в логическом контексте левая часть даст `false`, правая -- `true`:
```js
//+ run
-if ("\n0\n") {
- alert("true, совсем не как 0!");
+if ("\n0\n") {
+ alert( "true, совсем не как 0!" );
}
```
diff --git a/1-js/2-first-steps/15-while-for/1-loop-last-value/solution.md b/1-js/2-first-steps/15-while-for/1-loop-last-value/solution.md
index 6bdf4691..15c634c9 100644
--- a/1-js/2-first-steps/15-while-for/1-loop-last-value/solution.md
+++ b/1-js/2-first-steps/15-while-for/1-loop-last-value/solution.md
@@ -4,8 +4,8 @@
//+ run
var i = 3;
-while(i) {
- alert(i--);
+while (i) {
+ alert( i-- );
}
```
@@ -15,7 +15,7 @@ while(i) {
```js
var i = 3
-alert(i--); // выведет 3, затем уменьшит i до 2
+alert( i-- ); // выведет 3, затем уменьшит i до 2
alert(i--) // выведет 2, затем уменьшит i до 1
diff --git a/1-js/2-first-steps/15-while-for/1-loop-last-value/task.md b/1-js/2-first-steps/15-while-for/1-loop-last-value/task.md
index 46b79f7e..25359633 100644
--- a/1-js/2-first-steps/15-while-for/1-loop-last-value/task.md
+++ b/1-js/2-first-steps/15-while-for/1-loop-last-value/task.md
@@ -7,8 +7,8 @@
```js
var i = 3;
-while(i) {
- alert(i--);
+while (i) {
+ alert( i-- );
}
```
diff --git a/1-js/2-first-steps/15-while-for/2-which-value-while/solution.md b/1-js/2-first-steps/15-while-for/2-which-value-while/solution.md
index 5d0afef5..f7e77582 100644
--- a/1-js/2-first-steps/15-while-for/2-which-value-while/solution.md
+++ b/1-js/2-first-steps/15-while-for/2-which-value-while/solution.md
@@ -4,7 +4,7 @@
```js
//+ run
var i = 0;
-while (++i < 5) alert(i);
+while (++i < 5) alert( i );
```
Первое значение: `i=1`, так как операция `++i` сначала увеличит `i`, а потом уже произойдёт сравнение и выполнение `alert`.
@@ -18,7 +18,7 @@ while (++i < 5) alert(i);
```js
//+ run
var i = 0;
-while (i++ < 5) alert(i);
+while (i++ < 5) alert( i );
```
Первое значение: `i=1`. Остановимся на нём подробнее. Оператор `i++` увеличивает `i`, возвращая старое значение, так что в сравнении `i++ < 5` будет участвовать старое `i=0`.
diff --git a/1-js/2-first-steps/15-while-for/2-which-value-while/task.md b/1-js/2-first-steps/15-while-for/2-which-value-while/task.md
index 8d477177..674f005b 100644
--- a/1-js/2-first-steps/15-while-for/2-which-value-while/task.md
+++ b/1-js/2-first-steps/15-while-for/2-which-value-while/task.md
@@ -8,7 +8,7 @@
```js
var i = 0;
-while (++i < 5) alert(i);
+while (++i < 5) alert( i );
```
@@ -16,7 +16,7 @@ while (++i < 5) alert(i);
```js
var i = 0;
-while (i++ < 5) alert(i);
+while (i++ < 5) alert( i );
```
diff --git a/1-js/2-first-steps/15-while-for/3-which-value-for/solution.md b/1-js/2-first-steps/15-while-for/3-which-value-for/solution.md
index 734224cf..941a07be 100644
--- a/1-js/2-first-steps/15-while-for/3-which-value-for/solution.md
+++ b/1-js/2-first-steps/15-while-for/3-which-value-for/solution.md
@@ -2,9 +2,9 @@
```js
//+ run
-for(var i=0; i<5; ++i) alert(i);
+for (var i = 0; i < 5; ++i) alert( i );
-for(var i=0; i<5; i++) alert(i);
+for (var i = 0; i < 5; i++) alert( i );
```
Такой результат обусловлен алгоритмом работы `for`:
diff --git a/1-js/2-first-steps/15-while-for/3-which-value-for/task.md b/1-js/2-first-steps/15-while-for/3-which-value-for/task.md
index a08c4743..e918c89c 100644
--- a/1-js/2-first-steps/15-while-for/3-which-value-for/task.md
+++ b/1-js/2-first-steps/15-while-for/3-which-value-for/task.md
@@ -7,14 +7,14 @@
Постфиксная форма:
```js
-for(var i=0; i<5; i++) alert(i);
+for (var i = 0; i < 5; i++) alert( i );
```
Префиксная форма:
```js
-for(var i=0; i<5; ++i) alert(i);
+for (var i = 0; i < 5; ++i) alert( i );
```
diff --git a/1-js/2-first-steps/15-while-for/4-for-even/solution.md b/1-js/2-first-steps/15-while-for/4-for-even/solution.md
index 993f351d..62ca05c7 100644
--- a/1-js/2-first-steps/15-while-for/4-for-even/solution.md
+++ b/1-js/2-first-steps/15-while-for/4-for-even/solution.md
@@ -3,8 +3,8 @@
```js
//+ run demo
for (var i = 2; i <= 10; i++) {
- if ( i % 2 == 0) {
- alert(i);
+ if (i % 2 == 0) {
+ alert( i );
}
}
```
diff --git a/1-js/2-first-steps/15-while-for/5-replace-for-while/solution.md b/1-js/2-first-steps/15-while-for/5-replace-for-while/solution.md
index d0c6d428..84915ab4 100644
--- a/1-js/2-first-steps/15-while-for/5-replace-for-while/solution.md
+++ b/1-js/2-first-steps/15-while-for/5-replace-for-while/solution.md
@@ -4,7 +4,7 @@
//+ run
var i = 0;
while (i < 3) {
- alert("номер " + i + "!");
+ alert( "номер " + i + "!" );
i++;
}
```
diff --git a/1-js/2-first-steps/15-while-for/5-replace-for-while/task.md b/1-js/2-first-steps/15-while-for/5-replace-for-while/task.md
index 4898d8b9..2da6d6f2 100644
--- a/1-js/2-first-steps/15-while-for/5-replace-for-while/task.md
+++ b/1-js/2-first-steps/15-while-for/5-replace-for-while/task.md
@@ -7,7 +7,7 @@
```js
//+ run
for (var i = 0; i < 3; i++) {
- alert("номер " + i + "!");
+ alert( "номер " + i + "!" );
}
```
diff --git a/1-js/2-first-steps/15-while-for/6-repeat-until-correct/solution.md b/1-js/2-first-steps/15-while-for/6-repeat-until-correct/solution.md
index 311bb68b..49d5396e 100644
--- a/1-js/2-first-steps/15-while-for/6-repeat-until-correct/solution.md
+++ b/1-js/2-first-steps/15-while-for/6-repeat-until-correct/solution.md
@@ -6,7 +6,7 @@ var num;
do {
num = prompt("Введите число больше 100?", 0);
-} while(num <= 100 && num != null);
+} while (num <= 100 && num != null);
```
Цикл `do..while` повторяется, пока верны две проверки:
diff --git a/1-js/2-first-steps/15-while-for/7-list-primes/solution.md b/1-js/2-first-steps/15-while-for/7-list-primes/solution.md
index 7a566562..eead33a3 100644
--- a/1-js/2-first-steps/15-while-for/7-list-primes/solution.md
+++ b/1-js/2-first-steps/15-while-for/7-list-primes/solution.md
@@ -2,9 +2,9 @@
```js
Для всех i от 1 до 10 {
- проверить, делится ли число i на какое-либо из чисел до него
- если делится, то это i не подходит, берем следующее
- если не делится, то i - простое число
+ проверить, делится ли число i на какое - либо из чисел до него
+ если делится, то это i не подходит, берем следующее
+ если не делится, то i - простое число
}
```
@@ -14,15 +14,15 @@
```js
//+ run
-nextPrime:
-for(var i=2; i<10; i++) {
+nextPrime:
+ for (var i = 2; i < 10; i++) {
- for(var j=2; j 5) ? alert(i) : *!*continue*/!*;
```
@@ -287,7 +288,7 @@ if (условие) {
Например, внутри цикла по `i` находится цикл по `j`, и при выполнении некоторого условия мы бы хотели выйти из обоих циклов сразу:
```js
-//+ run
+//+ run no-beautify
*!*outer:*/!* for (var i = 0; i < 3; i++) {
for (var j = 0; j < 3; j++) {
@@ -308,12 +309,14 @@ alert('Готово!');
Метка имеет вид `"имя:"`, имя должно быть уникальным. Она ставится перед циклом, вот так:
```js
+//+ no-beautify
outer: for (var i = 0; i < 3; i++) { ... }
```
Можно также выносить ее на отдельную строку:
```js
+//+ no-beautify
outer:
for (var i = 0; i < 3; i++) { ... }
```
diff --git a/1-js/2-first-steps/16-switch/1-rewrite-switch-if-else/solution.md b/1-js/2-first-steps/16-switch/1-rewrite-switch-if-else/solution.md
index 98ca59a1..1605333f 100644
--- a/1-js/2-first-steps/16-switch/1-rewrite-switch-if-else/solution.md
+++ b/1-js/2-first-steps/16-switch/1-rewrite-switch-if-else/solution.md
@@ -3,6 +3,7 @@
В реальном случае, скорее всего, подойдёт обычное сравнение `'=='`.
```js
+//+ no-beautify
if(browser == 'IE') {
alert('О, да у вас IE!');
} else if (browser == 'Chrome'
diff --git a/1-js/2-first-steps/16-switch/1-rewrite-switch-if-else/task.md b/1-js/2-first-steps/16-switch/1-rewrite-switch-if-else/task.md
index f9d936ea..15bf197e 100644
--- a/1-js/2-first-steps/16-switch/1-rewrite-switch-if-else/task.md
+++ b/1-js/2-first-steps/16-switch/1-rewrite-switch-if-else/task.md
@@ -5,20 +5,20 @@
Напишите `if..else`, соответствующий следующему `switch`:
```js
-switch(browser) {
+switch (browser) {
case 'IE':
- alert('О, да у вас IE!');
+ alert( 'О, да у вас IE!' );
break;
case 'Chrome':
case 'Firefox':
case 'Safari':
case 'Opera':
- alert('Да, и эти браузеры мы поддерживаем');
+ alert( 'Да, и эти браузеры мы поддерживаем' );
break;
default:
- alert('Мы надеемся, что и в вашем браузере все ок!');
+ alert( 'Мы надеемся, что и в вашем браузере все ок!' );
}
```
diff --git a/1-js/2-first-steps/16-switch/2-rewrite-if-switch/solution.md b/1-js/2-first-steps/16-switch/2-rewrite-if-switch/solution.md
index 149bcfa1..ab738f53 100644
--- a/1-js/2-first-steps/16-switch/2-rewrite-if-switch/solution.md
+++ b/1-js/2-first-steps/16-switch/2-rewrite-if-switch/solution.md
@@ -4,18 +4,18 @@
//+ run
var a = +prompt('a?', '');
-switch(a) {
+switch (a) {
case 0:
- alert(0);
+ alert( 0 );
break;
case 1:
- alert(1);
+ alert( 1 );
break;
case 2:
case 3:
- alert('2,3');
+ alert( '2,3' );
*!*
break;
*/!*
diff --git a/1-js/2-first-steps/16-switch/2-rewrite-if-switch/task.md b/1-js/2-first-steps/16-switch/2-rewrite-if-switch/task.md
index a967428e..a542c993 100644
--- a/1-js/2-first-steps/16-switch/2-rewrite-if-switch/task.md
+++ b/1-js/2-first-steps/16-switch/2-rewrite-if-switch/task.md
@@ -9,14 +9,14 @@
var a = +prompt('a?', '');
if (a == 0) {
- alert(0);
+ alert( 0 );
}
if (a == 1) {
- alert(1);
+ alert( 1 );
}
-if (a == 2 || a == 3) {
- alert('2,3');
+if (a == 2 || a == 3) {
+ alert( '2,3' );
}
```
diff --git a/1-js/2-first-steps/16-switch/article.md b/1-js/2-first-steps/16-switch/article.md
index 023f542c..9a1f8fff 100644
--- a/1-js/2-first-steps/16-switch/article.md
+++ b/1-js/2-first-steps/16-switch/article.md
@@ -9,6 +9,7 @@
Выглядит она так:
```js
+//+ no-beautify
switch(x) {
case 'value1': // if (x === 'value1')
...
@@ -48,18 +49,18 @@ var a = 2 + 2;
switch (a) {
case 3:
- alert('Маловато');
+ alert( 'Маловато' );
break;
*!*
case 4:
- alert('В точку!');
+ alert( 'В точку!' );
break;
*/!*
case 5:
- alert('Перебор');
+ alert( 'Перебор' );
break;
default:
- alert('Я таких значений не знаю');
+ alert( 'Я таких значений не знаю' );
}
```
@@ -73,18 +74,18 @@ switch (a) {
```js
//+ run
-var a = 2+2;
+var a = 2 + 2;
switch (a) {
case 3:
- alert('Маловато');
+ alert( 'Маловато' );
*!*
case 4:
- alert('В точку!');
+ alert( 'В точку!' );
case 5:
- alert('Перебор');
+ alert( 'Перебор' );
default:
- alert('Я таких значений не знаю');
+ alert( 'Я таких значений не знаю' );
*/!*
}
```
@@ -92,9 +93,9 @@ switch (a) {
В примере выше последовательно выполнятся три `alert`:
```js
-alert('В точку!');
-alert('Перебор');
-alert('Я таких значений не знаю');
+alert( 'В точку!' );
+alert( 'Перебор' );
+alert( 'Я таких значений не знаю' );
```
В `case` могут быть любые выражения, в том числе включающие в себя переменные и функции.
@@ -106,10 +107,10 @@ alert('Я таких значений не знаю');
var a = 1;
var b = 0;
-switch(a) {
+switch (a) {
*!*
- case b+1:
- alert(1);
+ case b + 1:
+ alert( 1 );
break;
*/!*
@@ -125,7 +126,7 @@ switch(a) {
В примере ниже `case 3` и `case 5` выполняют один и тот же код:
```js
-//+ run
+//+ run no-beautify
var a = 2+2;
switch (a) {
@@ -155,17 +156,17 @@ switch (a) {
```js
//+ run
var arg = prompt("Введите arg?")
-switch(arg) {
+switch (arg) {
case '0':
case '1':
- alert('Один или ноль');
+ alert( 'Один или ноль' );
case '2':
- alert('Два');
+ alert( 'Два' );
break;
case 3:
- alert('Никогда не выполнится');
+ alert( 'Никогда не выполнится' );
default:
alert('Неизвестное значение: ' + arg)
diff --git a/1-js/2-first-steps/17-function-basics/4-pow/solution.md b/1-js/2-first-steps/17-function-basics/4-pow/solution.md
index 7d818e30..30ec3ce4 100644
--- a/1-js/2-first-steps/17-function-basics/4-pow/solution.md
+++ b/1-js/2-first-steps/17-function-basics/4-pow/solution.md
@@ -13,7 +13,7 @@
function pow(x, n) {
var result = x;
- for(var i = 1; i < n; i++) {
+ for (var i = 1; i < n; i++) {
result *= x;
}
diff --git a/1-js/2-first-steps/17-function-basics/4-pow/task.md b/1-js/2-first-steps/17-function-basics/4-pow/task.md
index 522badc3..0160bfcf 100644
--- a/1-js/2-first-steps/17-function-basics/4-pow/task.md
+++ b/1-js/2-first-steps/17-function-basics/4-pow/task.md
@@ -5,9 +5,9 @@
Напишите функцию `pow(x,n)`, которая возвращает `x` в степени `n`. Иначе говоря, умножает `x` на себя `n` раз и возвращает результат.
```js
-pow(3, 2) = 3*3 = 9
-pow(3, 3) = 3*3*3 = 27
-pow(1, 100) = 1*1*...*1 = 1
+pow(3, 2) = 3 * 3 = 9
+pow(3, 3) = 3 * 3 * 3 = 27
+pow(1, 100) = 1 * 1 * ...*1 = 1
```
Создайте страницу, которая запрашивает `x` и `n`, а затем выводит результат `pow(x,n)`.
diff --git a/1-js/2-first-steps/17-function-basics/article.md b/1-js/2-first-steps/17-function-basics/article.md
index 08e2859d..d4b6710b 100644
--- a/1-js/2-first-steps/17-function-basics/article.md
+++ b/1-js/2-first-steps/17-function-basics/article.md
@@ -13,8 +13,8 @@
Пример объявления функции:
```js
-function showMessage() {
- alert('Привет всем присутствующим!');
+function showMessage() {
+ alert( 'Привет всем присутствующим!' );
}
```
@@ -24,8 +24,8 @@ function showMessage() {
```js
//+ run
-function showMessage() {
- alert('Привет всем присутствующим!');
+function showMessage() {
+ alert( 'Привет всем присутствующим!' );
}
*!*
@@ -49,12 +49,12 @@ function showMessage() {
var message = 'Привет, я - Вася!'; // локальная переменная
*/!*
- alert(message);
+ alert( message );
}
showMessage(); // 'Привет, я - Вася!'
-alert(message); // <-- будет ошибка, т.к. переменная видна только внутри
+alert( message ); // <-- будет ошибка, т.к. переменная видна только внутри
```
**Блоки `if/else`, `switch`, `for`, `while`, `do..while` не влияют на область видимости переменных.**
@@ -64,6 +64,7 @@ alert(message); // <-- будет ошибка, т.к. переменная ви
Например:
```js
+//+ no-beautify
function count() {
// переменные i,j не будут уничтожены по окончании цикла
for (*!*var*/!* i=0; i<3; i++) {
@@ -86,12 +87,12 @@ function count() {
*!*
var i, j; // передвинули объявления var в начало
*/!*
- for (i=0; i<3; i++) {
+ for (i = 0; i < 3; i++) {
j = i * 2;
}
- alert(i); // i=3
- alert(j); // j=4
+ alert( i ); // i=3
+ alert( j ); // j=4
}
```
@@ -100,7 +101,7 @@ function count() {
Функция может обратиться ко внешней переменной, например:
```js
-//+ run
+//+ run no-beautify
var *!*userName*/!* = 'Вася';
function showMessage() {
@@ -121,13 +122,13 @@ function showMessage() {
userName = 'Петя'; // (1) присвоение во внешнюю переменную
var message = 'Привет, я ' + userName;
- alert(message);
+ alert( message );
}
showMessage();
*!*
-alert(userName); // Петя, значение внешней переменной изменено функцией
+alert( userName ); // Петя, значение внешней переменной изменено функцией
*/!*
```
@@ -154,7 +155,7 @@ function showMessage() {
showMessage();
-alert(message); // Привет
+alert( message ); // Привет
```
В коде выше переменная `message` нигде не объявлена, а сразу присваивается. Скорее всего, программист просто забыл поставить `var`.
@@ -177,7 +178,7 @@ alert(message); // Привет
Например, этот код выводит два сообщения:
```js
-//+ run
+//+ run no-beautify
function showMessage(*!*from, text*/!*) { // параметры from, text
from = "** " + from + " **"; // здесь может быть сложный код оформления
@@ -197,18 +198,18 @@ showMessage('Маша', 'Как дела?');
```js
//+ run
-function showMessage(from, text) {
+function showMessage(from, text) {
*!*
- from = '**' + from + '**'; // меняем локальную переменную from
+ from = '**' + from + '**'; // меняем локальную переменную from
*/!*
- alert(from + ': ' + text);
+ alert( from + ': ' + text );
}
var from = "Маша";
-showMessage(from, "Привет");
+showMessage(from, "Привет");
-alert(from); // старое значение from без изменений, в функции была изменена копия
+alert( from ); // старое значение from без изменений, в функции была изменена копия
```
## Аргументы по умолчанию
@@ -234,7 +235,7 @@ function showMessage(from, text) {
}
*/!*
- alert(from + ": " + text);
+ alert( from + ": " + text );
}
showMessage("Маша", "Привет!"); // Маша: Привет!
@@ -254,9 +255,9 @@ showMessage("Маша"); // Маша: текст не передан
```js
//+ run
function showMessage(from, text) {
- text = text || 'текст не передан';
+ text = text || 'текст не передан';
- ...
+ ...
}
```
@@ -273,7 +274,7 @@ function showMessage(from, text) {
Например, создадим функцию `calcD`, которая будет возвращать дискриминант квадратного уравнения по формуле b2 - 4ac
:
```js
-//+ run
+//+ run no-beautify
function calcD(a, b, c) {
*!*return*/!* b*b - 4*a*c;
}
@@ -291,7 +292,7 @@ alert(test); // 20
```js
//+ run
function checkAge(age) {
- if (age > 18) {
+ if (age > 18) {
return true;
} else {
return confirm('Родители разрешили?');
@@ -301,9 +302,9 @@ function checkAge(age) {
var age = prompt('Ваш возраст?');
if (checkAge(age)) {
- alert('Доступ разрешен');
+ alert( 'Доступ разрешен' );
} else {
- alert('В доступе отказано');
+ alert( 'В доступе отказано' );
}
```
@@ -318,8 +319,8 @@ function showMovie(age) {
return;
*/!*
}
-
- alert("Фильм не для всех"); // (*)
+
+ alert( "Фильм не для всех" ); // (*)
// ...
}
```
@@ -342,7 +343,7 @@ alert( doNothing() ); // undefined
```js
//+ run
-function doNothing() {
+function doNothing() {
return;
}
@@ -360,12 +361,14 @@ alert( doNothing() === undefined ); // true
Функции, которые начинаются с `"show"` -- что-то показывают:
```js
+//+ no-beautify
showMessage(..) // префикс show, "показать" сообщение
```
Функции, начинающиеся с `"get"` -- получают, и т.п.:
```js
+//+ no-beautify
getAge(..) // get, "получает" возраст
calcD(..) // calc, "вычисляет" дискриминант
createForm(..) // create, "создает" форму
diff --git a/1-js/2-first-steps/18-function-declaration-expression/article.md b/1-js/2-first-steps/18-function-declaration-expression/article.md
index 18db5aeb..0853f01c 100644
--- a/1-js/2-first-steps/18-function-declaration-expression/article.md
+++ b/1-js/2-first-steps/18-function-declaration-expression/article.md
@@ -6,8 +6,8 @@
```js
//+ run
-function sayHi() {
- alert( "Привет" );
+function sayHi() {
+ alert( "Привет" );
}
*!*
@@ -20,7 +20,7 @@ alert( sayHi ); // выведет код функции
**Функцию можно скопировать в другую переменную:**
```js
-//+ run
+//+ run no-beautify
function sayHi() { // (1)
alert( "Привет" );
}
@@ -53,7 +53,7 @@ sayHi(); // ошибка (4)
```js
//+ run
var f = function(параметры) {
- // тело функции
+ // тело функции
};
```
@@ -62,7 +62,7 @@ var f = function(параметры) {
```js
//+ run
var sayHi = function(person) {
- alert("Привет, " + person);
+ alert( "Привет, " + person );
};
sayHi('Вася');
@@ -84,7 +84,7 @@ sayHi('Вася');
function sum(a, b) {
return a + b;
}
-
+
// Function Expression
var sum = function(a, b) {
return a + b;
@@ -104,7 +104,7 @@ sayHi("Вася"); // Привет, Вася
*/!*
function sayHi(name) {
- alert("Привет, " + name);
+ alert( "Привет, " + name );
}
```
@@ -113,11 +113,11 @@ function sayHi(name) {
```js
//+ run
*!*
-sayHi("Вася"); // ошибка!
+sayHi("Вася"); // ошибка!
*/!*
var sayHi = function(name) {
- alert("Привет, " + name);
+ alert( "Привет, " + name );
}
```
@@ -140,9 +140,13 @@ var sayHi = function(name) {
var age = +prompt("Сколько вам лет?", 20);
if (age >= 18) {
- function sayHi() { alert('Прошу вас!'); }
+ function sayHi() {
+ alert( 'Прошу вас!' );
+ }
} else {
- function sayHi() { alert('До 18 нельзя'); }
+ function sayHi() {
+ alert( 'До 18 нельзя' );
+ }
}
sayHi();
@@ -158,19 +162,24 @@ sayHi();
Дальше, во время выполнения, объявления Function Declaration игнорируются (они уже были обработаны). Это как если бы код был таким:
```js
-function sayHi() { alert('Прошу вас!'); }
-function sayHi() { alert('До 18 нельзя'); }
+function sayHi() {
+ alert( 'Прошу вас!' );
+}
+
+function sayHi() {
+ alert( 'До 18 нельзя' );
+}
var age = 20;
if (age >= 18) {
- /* объявление было обработано ранее */
+ /* объявление было обработано ранее */
} else {
/* объявление было обработано ранее */
}
*!*
-sayHi(); // "До 18 нельзя", сработает всегда вторая функция
+sayHi(); // "До 18 нельзя", сработает всегда вторая функция
*/!*
```
@@ -191,9 +200,13 @@ var age = prompt('Сколько вам лет?');
var sayHi;
if (age >= 18) {
- sayHi = function() { alert('Прошу Вас!'); }
+ sayHi = function() {
+ alert( 'Прошу Вас!' );
+ }
} else {
- sayHi = function() { alert('До 18 нельзя'); }
+ sayHi = function() {
+ alert( 'До 18 нельзя' );
+ }
}
sayHi();
@@ -202,7 +215,7 @@ sayHi();
Или даже так:
```js
-//+ run
+//+ run no-beautify
var age = prompt('Сколько вам лет?');
var sayHi = (age >= 18) ?
@@ -226,17 +239,17 @@ sayHi();
//+ run
*!*
function ask(question, yes, no) {
- if (confirm(question)) yes()
- else no();
-}
+ if (confirm(question)) yes()
+ else no();
+ }
*/!*
function showOk() {
- alert("Вы согласились.");
+ alert( "Вы согласились." );
}
function showCancel() {
- alert("Вы отменили выполнение.");
+ alert( "Вы отменили выполнение." );
}
// использование
@@ -250,7 +263,7 @@ ask("Вы согласны?", showOk, showCancel);
Здесь обратим внимание на то, что то же самое можно написать более коротко:
```js
-//+ run
+//+ run no-beautify
function ask(question, yes, no) {
if (confirm(question)) yes()
else no();
@@ -283,8 +296,8 @@ ask(
//+ run
var sum = new Function('a,b', ' return a+b; ');
-var result = sum(1,2);
-alert(result); // 3
+var result = sum(1, 2);
+alert( result ); // 3
```
То есть, функция создаётся вызовом `new Function(params, code)`:
@@ -340,6 +353,7 @@ alert(result); // 3
Сравните по читаемости:
```js
+//+ no-beautify
// Function Expression
var f = function() { ... }
diff --git a/1-js/2-first-steps/19-recursion/1-sum-to/solution.md b/1-js/2-first-steps/19-recursion/1-sum-to/solution.md
index 4fba66fe..791c4b3d 100644
--- a/1-js/2-first-steps/19-recursion/1-sum-to/solution.md
+++ b/1-js/2-first-steps/19-recursion/1-sum-to/solution.md
@@ -4,7 +4,7 @@
//+ run
function sumTo(n) {
var sum = 0;
- for(var i=1; i<=n; i++) {
+ for (var i = 1; i <= n; i++) {
sum += i;
}
return sum;
@@ -19,7 +19,7 @@ alert( sumTo(100) );
//+ run
function sumTo(n) {
if (n == 1) return 1;
- return n + sumTo(n-1);
+ return n + sumTo(n - 1);
}
alert( sumTo(100) );
@@ -30,7 +30,7 @@ alert( sumTo(100) );
```js
//+ run
function sumTo(n) {
- return n*(n+1)/2;
+ return n * (n + 1) / 2;
}
alert( sumTo(100) );
diff --git a/1-js/2-first-steps/19-recursion/1-sum-to/task.md b/1-js/2-first-steps/19-recursion/1-sum-to/task.md
index 0d122262..9e7e8e8f 100644
--- a/1-js/2-first-steps/19-recursion/1-sum-to/task.md
+++ b/1-js/2-first-steps/19-recursion/1-sum-to/task.md
@@ -5,6 +5,7 @@
Напишите функцию `sumTo(n)`, которая для данного `n` вычисляет сумму чисел от 1 до `n`, например:
```js
+//+ no-beautify
sumTo(1) = 1
sumTo(2) = 2 + 1 = 3
sumTo(3) = 3 + 2 + 1 = 6
diff --git a/1-js/2-first-steps/19-recursion/2-factorial/solution.md b/1-js/2-first-steps/19-recursion/2-factorial/solution.md
index dcc08cc3..94e5db7c 100644
--- a/1-js/2-first-steps/19-recursion/2-factorial/solution.md
+++ b/1-js/2-first-steps/19-recursion/2-factorial/solution.md
@@ -5,7 +5,7 @@
```js
//+ run
function factorial(n) {
- return (n!=1) ? n*factorial(n-1) : 1;
+ return (n != 1) ? n * factorial(n - 1) : 1;
}
alert( factorial(5) ); // 120
@@ -16,7 +16,7 @@ alert( factorial(5) ); // 120
```js
//+ run
function factorial(n) {
- return n ? n*factorial(n-1) : 1;
+ return n ? n * factorial(n - 1) : 1;
}
alert( factorial(5) ); // 120
diff --git a/1-js/2-first-steps/19-recursion/2-factorial/task.md b/1-js/2-first-steps/19-recursion/2-factorial/task.md
index 47ef048a..bacfa24b 100644
--- a/1-js/2-first-steps/19-recursion/2-factorial/task.md
+++ b/1-js/2-first-steps/19-recursion/2-factorial/task.md
@@ -7,17 +7,17 @@
Определение факториала можно записать как:
```js
-n! = n*(n-1)*(n-2)*...*1
+n! = n * (n - 1) * (n - 2) * ...*1
```
Примеры значений для разных `n`:
```js
1! = 1
-2! = 2*1 = 2
-3! = 3*2*1 = 6
-4! = 4*3*2*1 = 24
-5! = 5*4*3*2*1 = 120
+2! = 2 * 1 = 2
+3! = 3 * 2 * 1 = 6
+4! = 4 * 3 * 2 * 1 = 24
+5! = 5 * 4 * 3 * 2 * 1 = 120
```
Задача -- написать функцию `factorial(n)`, которая возвращает факториал числа `n!`, используя рекурсивный вызов.
diff --git a/1-js/2-first-steps/19-recursion/3-fibonacci-numbers/solution.md b/1-js/2-first-steps/19-recursion/3-fibonacci-numbers/solution.md
index 4e6b2301..67afa2fe 100644
--- a/1-js/2-first-steps/19-recursion/3-fibonacci-numbers/solution.md
+++ b/1-js/2-first-steps/19-recursion/3-fibonacci-numbers/solution.md
@@ -5,7 +5,7 @@
```js
//+ run
function fib(n) {
- return n <= 1 ? n : fib(n-1) + fib(n-2);
+ return n <= 1 ? n : fib(n - 1) + fib(n - 2);
}
alert( fib(3) ); // 2
@@ -18,6 +18,7 @@ alert( fib(7) ); // 13
Это потому, что функция порождает обширное дерево вложенных вызовов. При этом ряд значений вычисляются много раз. Например, посмотрим на отрывок вычислений:
```js
+//+ no-beautify
...
fib(5) = fib(4) + fib(3)
fib(4) = fib(3) + fib(2)
@@ -35,6 +36,7 @@ fib(4) = fib(3) + fib(2)
Будем идти по формуле слева-направо:
```js
+//+ no-beautify
var a = 1, b = 1; // начальные значения
var c = a + b; // 2
@@ -47,6 +49,7 @@ a b c
Теперь следующий шаг, присвоим `a` и `b` текущие 2 числа и получим новое следующее в `c`:
```js
+//+ no-beautify
a = b, b = c;
c = a + b;
@@ -59,6 +62,7 @@ c = a + b;
Следующий шаг даст нам еще одно число последовательности:
```js
+//+ no-beautify
a = b, b = c;
c = a + b;
@@ -77,18 +81,19 @@ P.S. Этот подход к вычислению называется [дин
```js
//+ run
function fib(n) {
- var a = 1, b = 1;
+ var a = 1,
+ b = 1;
for (var i = 3; i <= n; i++) {
var c = a + b;
a = b;
b = c;
- }
+ }
return b;
}
alert( fib(3) ); // 2
alert( fib(7) ); // 13
-alert( fib(77)); // 5527939700884757
+alert( fib(77) ); // 5527939700884757
```
Цикл здесь начинается с `i=3`, так как первое и второе числа Фибоначчи заранее записаны в переменные `a=1`, `b=1`.
\ No newline at end of file
diff --git a/1-js/2-first-steps/19-recursion/3-fibonacci-numbers/task.md b/1-js/2-first-steps/19-recursion/3-fibonacci-numbers/task.md
index a174a148..b05734a0 100644
--- a/1-js/2-first-steps/19-recursion/3-fibonacci-numbers/task.md
+++ b/1-js/2-first-steps/19-recursion/3-fibonacci-numbers/task.md
@@ -11,6 +11,7 @@
Напишите функцию `fib(n)`, которая возвращает `n-е` число Фибоначчи. Пример работы:
```js
+//+ no-beautify
function fib(n) { /* ваш код */ }
alert( fib(3) ); // 2
diff --git a/1-js/2-first-steps/19-recursion/article.md b/1-js/2-first-steps/19-recursion/article.md
index 89ec2e62..b57660a6 100644
--- a/1-js/2-first-steps/19-recursion/article.md
+++ b/1-js/2-first-steps/19-recursion/article.md
@@ -22,7 +22,7 @@
Её можно представить как совокупность более простого действия и более простой задачи того же типа вот так:
```js
-pow(x, n) = x * pow(x, n-1)
+pow(x, n) = x * pow(x, n - 1)
```
То есть, xn = x * xn-1
.
@@ -46,9 +46,9 @@ pow(x, n) = x * pow(x, n-1)
//+ run
function pow(x, n) {
if (n != 1) { // пока n != 1, сводить вычисление pow(x,n) к pow(x,n-1)
- return x * pow(x, n-1);
- } else {
- return x;
+ return x * pow(x, n - 1);
+ } else {
+ return x;
}
}
@@ -85,10 +85,10 @@ alert( pow(2, 3) ); // 8
function pow(x, n) {
if (n != 1) { // пока n != 1 сводить вычисление pow(x,n) к pow(x,n-1)
*!*
- return x * pow(x, n-1);
+ return x * pow(x, n - 1);
*/!*
- } else {
- return x;
+ } else {
+ return x;
}
}
```
@@ -109,14 +109,14 @@ function pow(x, n) {
//+ run
function pow(x, n) {
if (n != 1) { // пока n!=1 сводить вычисление pow(..n) к pow(..n-1)
- return x * pow(x, n-1);
- } else {
- return x;
+ return x * pow(x, n - 1);
+ } else {
+ return x;
}
}
*!*
-alert( pow(2, 3) ); // (*)
+alert( pow(2, 3) ); // (*)
*/!*
```
@@ -154,11 +154,11 @@ alert( pow(2, 3) ); // (*)
```js
function pow(x, n) {
- if (n != 1) {
- return x * pow(x, n-1);
- } else {
+ if (n != 1) {
+ return x * pow(x, n - 1);
+ } else {
*!*
- return x; // первая степень числа равна самому числу
+ return x; // первая степень числа равна самому числу
*/!*
}
}
@@ -194,7 +194,7 @@ function pow(x, n) {
```js
function pow(x, n) {
var result = x;
- for(var i=1; i
- alert("обычный скрипт");
+ alert( "обычный скрипт" );
```
diff --git a/1-js/2-first-steps/2-external-script/3-async-defer-inline-first/task.md b/1-js/2-first-steps/2-external-script/3-async-defer-inline-first/task.md
index e4013123..612fbbae 100644
--- a/1-js/2-first-steps/2-external-script/3-async-defer-inline-first/task.md
+++ b/1-js/2-first-steps/2-external-script/3-async-defer-inline-first/task.md
@@ -11,7 +11,7 @@
```
diff --git a/1-js/2-first-steps/2-external-script/article.md b/1-js/2-first-steps/2-external-script/article.md
index 9c610d68..9a3567ed 100644
--- a/1-js/2-first-steps/2-external-script/article.md
+++ b/1-js/2-first-steps/2-external-script/article.md
@@ -53,7 +53,7 @@
```html
```
@@ -69,24 +69,27 @@
+
+
Начинаем считать:
*!*
*/!*
Кролики посчитаны!
+
```
diff --git a/1-js/2-first-steps/20-named-function-expression/1-nfe-check/solution.md b/1-js/2-first-steps/20-named-function-expression/1-nfe-check/solution.md
index f8cb2fb5..5875fae8 100644
--- a/1-js/2-first-steps/20-named-function-expression/1-nfe-check/solution.md
+++ b/1-js/2-first-steps/20-named-function-expression/1-nfe-check/solution.md
@@ -1,7 +1,7 @@
**Первый код выведет `function ...`, второй -- ошибку во всех браузерах, кроме IE8-.**
```js
-//+ run untrusted
+//+ run untrusted no-beautify
// обычное объявление функции (Function Declaration)
function g() { return 1; };
@@ -11,7 +11,7 @@ alert(g); // функция
Во втором коде скобки есть, значит функция внутри является не `Function Declaration`, а частью выражения, то есть `Named Function Expression`. Его имя видно только внутри, снаружи переменная `g` не определена.
```js
-//+ run untrusted
+//+ run untrusted no-beautify
// Named Function Expression!
(function g() { return 1; });
diff --git a/1-js/2-first-steps/20-named-function-expression/1-nfe-check/task.md b/1-js/2-first-steps/20-named-function-expression/1-nfe-check/task.md
index 1e7deaa8..0510ff4d 100644
--- a/1-js/2-first-steps/20-named-function-expression/1-nfe-check/task.md
+++ b/1-js/2-first-steps/20-named-function-expression/1-nfe-check/task.md
@@ -5,6 +5,7 @@
Каков будет результат выполнения кода?
```js
+//+ no-beautify
function g() { return 1; }
alert(g);
@@ -13,6 +14,7 @@ alert(g);
А такого? Будет ли разница, если да -- почему?
```js
+//+ no-beautify
(function g() { return 1; });
alert(g);
diff --git a/1-js/2-first-steps/20-named-function-expression/article.md b/1-js/2-first-steps/20-named-function-expression/article.md
index 9d4de04e..51ff860b 100644
--- a/1-js/2-first-steps/20-named-function-expression/article.md
+++ b/1-js/2-first-steps/20-named-function-expression/article.md
@@ -9,12 +9,13 @@
Обычное функциональное выражение:
```js
-var f = function (...) { /* тело функции */ };
+var f = function(...) { /* тело функции */ };
```
Именованное с именем `sayHi`:
```js
+//+ no-beautify
var f = function *!*sayHi*/!*(...) { /* тело функции */ };
```
@@ -29,10 +30,10 @@ var f = function *!*sayHi*/!*(...) { /* тело функции */ };
```js
//+ run
var f = function sayHi(name) {
- alert(sayHi); // изнутри функции - видно (выведет код функции)
+ alert( sayHi ); // изнутри функции - видно (выведет код функции)
};
-alert(sayHi); // снаружи - не видно (ошибка: undefined variable 'sayHi')
+alert( sayHi ); // снаружи - не видно (ошибка: undefined variable 'sayHi')
```
Кроме того, имя NFE нельзя перезаписать:
@@ -43,7 +44,7 @@ var test = function sayHi(name) {
*!*
sayHi = "тест"; // попытка перезаписи
*/!*
- alert(sayHi); // function... (перезапись не удалась)
+ alert( sayHi ); // function... (перезапись не удалась)
};
test();
@@ -63,8 +64,8 @@ NFE используется в первую очередь в тех ситуа
```js
//+ run
-function f(n) {
- return n ? n*f(n-1) : 1;
+function f(n) {
+ return n ? n * f(n - 1) : 1;
};
alert( f(5) ); // 120
@@ -74,8 +75,8 @@ alert( f(5) ); // 120
```js
//+ run
-function f(n) {
- return n ? n*f(n-1) : 1;
+function f(n) {
+ return n ? n * f(n - 1) : 1;
};
*!*
@@ -91,7 +92,7 @@ alert( g(5) ); // запуск функции с новым именем - ош
Для того, чтобы функция всегда надёжно работала, объявим её как Named Function Expression:
```js
-//+ run
+//+ run no-beautify
var f = function *!*factorial*/!*(n) {
return n ? n**!*factorial*/!*(n-1) : 1;
};
@@ -118,7 +119,7 @@ var f = function factorial(n) { /*...*/ };
// в IE8- false
// в остальных браузерах ошибка, т.к. имя factorial не видно
-alert(f === factorial);
+alert( f === factorial );
```
Все остальные браузеры полностью поддерживают именованные функциональные выражения.
diff --git a/1-js/2-first-steps/21-javascript-specials/article.md b/1-js/2-first-steps/21-javascript-specials/article.md
index 8b01bf72..467bb5c6 100644
--- a/1-js/2-first-steps/21-javascript-specials/article.md
+++ b/1-js/2-first-steps/21-javascript-specials/article.md
@@ -13,14 +13,14 @@
Операторы разделяются точкой с запятой:
```js
-//+ run
+//+ run no-beautify
alert('Привет'); alert('Мир');
```
Как правило, перевод строки тоже подразумевает точку с запятой. Так тоже будет работать:
```js
-//+ run
+//+ run no-beautify
alert('Привет')
alert('Мир')
```
@@ -28,7 +28,7 @@ alert('Мир')
...Однако, иногда JavaScript не вставляет точку с запятой. Например:
```js
-//+ run
+//+ run no-beautify
var a = 2
+3
@@ -66,6 +66,7 @@ x = "Петя";
Есть 5 "примитивных" типов и объекты:
```js
+//+ no-beautify
x = 1; // число
x = "Тест"; // строка, кавычки могут быть одинарные или двойные
x = true; // булево значение true/false
@@ -144,8 +145,8 @@ alert( x ); // undefined
var userName = prompt("Введите имя?", "Василий");
var isTeaWanted = confirm("Вы хотите чаю?");
-alert( "Посетитель: " + userName);
-alert( "Чай: " + isTeaWanted);
+alert( "Посетитель: " + userName );
+alert( "Чай: " + isTeaWanted );
```
Подробнее: [](/uibasic).
@@ -159,7 +160,7 @@ alert( "Чай: " + isTeaWanted);
```js
//+ run
-alert( 1 + 2 ); // 3, число
+alert( 1 + 2 ); // 3, число
alert( '1' + 2 ); // '12', строка
alert( 1 + '2' ); // '12', строка
```
@@ -172,7 +173,7 @@ alert( 1 + '2' ); // '12', строка
```js
//+ run
alert( 0 == false ); // true
-alert( true > 0 ); // true
+alert( true > 0 ); // true
```
Исключение -- сравнение двух строк (см. далее).
@@ -188,7 +189,7 @@ alert( true > 0 ); // true
Например, забавное следствие этих правил для `null`:
```js
-//+ run
+//+ run no-beautify
alert( null > 0 ); // false, т.к. null преобразовано к 0
alert( null >= 0 ); // true, т.к. null преобразовано к 0
alert( null == 0 ); // false, в стандарте явно указано, что null равен лишь undefined
@@ -205,7 +206,7 @@ alert( null == 0 ); // false, в стандарте явно указано, ч
```js
//+ run
-alert('а' > 'Я'); // true
+alert( 'а' > 'Я' ); // true
```
@@ -243,14 +244,14 @@ alert( null || 1 || 2 ); // 1
```js
// 1
-while (условие) {
+while (условие) {
...
}
// 2
-do {
+do {
...
-} while(условие);
+} while (условие);
// 3
for (var i = 0; i < 10; i++) {
@@ -294,15 +295,15 @@ for(;;) {
var age = prompt('Ваш возраст', 18);
switch (age) {
- case 18:
- alert('Никогда не сработает'); // результат prompt - строка, а не число
+ case 18:
+ alert( 'Никогда не сработает' ); // результат prompt - строка, а не число
- case "18": // вот так - сработает!
- alert('Вам 18 лет!');
+ case "18": // вот так - сработает!
+ alert( 'Вам 18 лет!' );
break;
default:
- alert('Любое значение, не совпавшее с case');
+ alert( 'Любое значение, не совпавшее с case' );
}
```
@@ -333,7 +334,7 @@ alert( sum(1, 2) ); // 3
Функция без `return` считается возвращающей `undefined`. Вызов `return` без значения также возвращает `undefined`:
```js
-//+ run
+//+ run no-beautify
function f() { }
alert( f() ); // undefined
```
@@ -379,7 +380,7 @@ alert( sum(1, 2) ); // 3
```js
//+ run
var factorial = function me(n) {
- return (n == 1) ? n : n * me(n-1);
+ return (n == 1) ? n : n * me(n - 1);
}
alert( factorial(5) ); // 120
diff --git a/1-js/2-first-steps/3-structure/article.md b/1-js/2-first-steps/3-structure/article.md
index c0376ffc..b9cfb3d4 100644
--- a/1-js/2-first-steps/3-structure/article.md
+++ b/1-js/2-first-steps/3-structure/article.md
@@ -11,14 +11,14 @@
Например, вместо одного вызова `alert` сделаем два:
```js
-//+ run
+//+ run no-beautify
alert('Привет'); alert('Мир');
```
Как правило, каждая команда пишется на отдельной строке -- так код лучше читается:
```js
-//+ run
+//+ run no-beautify
alert('Привет');
alert('Мир');
```
@@ -30,7 +30,7 @@ alert('Мир');
Так тоже будет работать:
```js
-//+ run
+//+ run no-beautify
alert('Привет')
alert('Мир')
```
@@ -42,7 +42,7 @@ alert('Мир')
Например, запустите этот код:
```js
-//+ run
+//+ run no-beautify
alert(3 +
1
+ 2);
@@ -69,7 +69,7 @@ alert(3 +
Важно, что вот такой код уже работать не будет:
```js
-//+ run
+//+ run no-beautify
alert("Сейчас будет ошибка")
[1, 2].forEach(alert)
```
@@ -79,7 +79,7 @@ alert("Сейчас будет ошибка")
Если её поставить, то всё будет в порядке:
```js
//+ run
-alert("Сейчас будет ошибка");
+alert( "Сейчас будет ошибка" );
[1, 2].forEach(alert)
```
@@ -96,9 +96,9 @@ alert("Сейчас будет ошибка");
```js
//+ run
// Команда ниже говорит "Привет"
-alert('Привет');
+alert( 'Привет' );
-alert('Мир'); // Второе сообщение выводим отдельно
+alert( 'Мир' ); // Второе сообщение выводим отдельно
```
*Многострочные комментарии* начинаются слешем-звездочкой "/*"
и заканчиваются звездочкой-слэшем "*/"
, вот так:
@@ -108,8 +108,8 @@ alert('Мир'); // Второе сообщение выводим отдель
/* Пример с двумя сообщениями.
Это - многострочный комментарий.
*/
-alert('Привет');
-alert('Мир');
+alert( 'Привет' );
+alert( 'Мир' );
```
Все содержимое комментария игнорируется. Если поместить код внутрь /* ... */
или после `//` -- он не выполнится.
@@ -117,9 +117,9 @@ alert('Мир');
```js
//+ run
/* Закомментировали код
-alert('Привет');
+alert( 'Привет' );
*/
-alert('Мир');
+alert( 'Мир' );
```
[smart header="Используйте горячие клавиши!"]
@@ -130,7 +130,7 @@ alert('Мир');
В этом коде будет ошибка:
```js
-//+ run
+//+ run no-beautify
/*
/* вложенный комментарий ?!? */
*/
diff --git a/1-js/2-first-steps/5-variables/1-hello-variables/solution.md b/1-js/2-first-steps/5-variables/1-hello-variables/solution.md
index 1eab8bc7..e81aff84 100644
--- a/1-js/2-first-steps/5-variables/1-hello-variables/solution.md
+++ b/1-js/2-first-steps/5-variables/1-hello-variables/solution.md
@@ -4,10 +4,10 @@
//+ run
var admin, name; // две переменных через запятую
-name = "Василий";
+name = "Василий";
admin = name;
-alert(admin); // "Василий"
+alert( admin ); // "Василий"
```
diff --git a/1-js/2-first-steps/5-variables/article.md b/1-js/2-first-steps/5-variables/article.md
index 2138e339..d0e996b9 100644
--- a/1-js/2-first-steps/5-variables/article.md
+++ b/1-js/2-first-steps/5-variables/article.md
@@ -28,9 +28,9 @@ message = 'Hello'; // сохраним в переменной строку
```js
//+ run
var message;
-message = 'Hello!';
+message = 'Hello!';
-alert(message); // выведет содержимое переменной
+alert( message ); // выведет содержимое переменной
```
Для краткости можно совместить объявление переменной и запись данных:
@@ -42,6 +42,7 @@ var message = 'Hello!';
Можно даже объявить несколько переменных сразу:
```js
+//+ no-beautify
var user = 'John', age = 25, message = 'Hello';
```
@@ -59,11 +60,11 @@ var user = 'John', age = 25, message = 'Hello';
//+ run
var message;
-message = 'Hello!';
+message = 'Hello!';
-message = 'World!'; // заменили значение
+message = 'World!'; // заменили значение
-alert(message);
+alert( message );
```
При изменении значения старое содержимое переменной удаляется.
@@ -83,8 +84,8 @@ var message;
message = hello;
*/!*
-alert(hello); // Hello world!
-alert(message); // Hello world!
+alert( hello ); // Hello world!
+alert( message ); // Hello world!
```
[smart]
@@ -114,15 +115,16 @@ var test123;
```js
//+ run untrusted
-var $ = 1; // объявили переменную с именем '$'
+var $ = 1; // объявили переменную с именем '$'
var _ = 2; // переменная с именем '_'
-alert($ + _); // 3
+alert( $ + _ ); // 3
```
А такие переменные были бы неправильными:
```js
+//+ no-beautify
var 1a; // начало не может быть цифрой
var my-name; // дефис '-' не является разрешенным символом
@@ -139,7 +141,7 @@ var my-name; // дефис '-' не является разрешенным си
```js
//+ run
var имя = "Вася";
-alert(имя); // "Вася"
+alert( имя ); // "Вася"
```
Технически, ошибки здесь нет, но на практике сложилась традиция использовать в именах только английские буквы.
@@ -152,7 +154,7 @@ alert(имя); // "Вася"
Например, такой пример выдаст синтаксическую ошибку:
```js
-//+ run
+//+ run no-beautify
var return = 5; // ошибка
alert(return);
```
@@ -205,7 +207,7 @@ num = 5; // ошибки не будет, так как строгий режи
*!*
test = 5; // здесь будет ошибка!
*/!*
- alert(test); // не сработает
+ alert( test ); // не сработает
```
@@ -230,7 +232,7 @@ var COLOR_BLUE = "#00F";
var COLOR_ORANGE = "#FF7F00";
var color = COLOR_ORANGE;
-alert(color); // #FF7F00
+alert( color ); // #FF7F00
```
Технически, константа является обычной переменной, то есть её *можно* изменить. Но мы *договариваемся* этого не делать.
diff --git a/1-js/2-first-steps/6-variable-names/article.md b/1-js/2-first-steps/6-variable-names/article.md
index a802c827..ceb5ab74 100644
--- a/1-js/2-first-steps/6-variable-names/article.md
+++ b/1-js/2-first-steps/6-variable-names/article.md
@@ -10,7 +10,9 @@
Что такое это "развитие"? Это когда я вчера написал код, а сегодня (или спустя неделю) прихожу и хочу его поменять. Например, вывести сообщение не так, а эдак... Обработать товары по-другому, добавить функционал.. А где у меня там сообщение хранится? А где товар?...
-**Гораздо проще найти нужные данные, если они правильно помечены, то есть когда переменная названа *правильно*.**
+Гораздо проще найти нужные данные, если они правильно помечены, то есть когда переменная названа *правильно*.
+
+## Правила именования
- **Правило 1.**
@@ -28,7 +30,7 @@ var ssilka;
Подойдут:
```js
-var myGoods;
+var myGoods;
var price;
var link;
```
@@ -81,19 +83,19 @@ var border_left_width;
-Позвольте поделиться одним небольшим секретом, который позволит улучшить ваши названия переменных и сэкономит вам время.
+Позвольте поделиться одним небольшим секретом, который очень прост, но позволит улучшить названия переменных и сэкономит время.
-Бывает так, что вы написали код, через некоторое время к нему возвращаетесь, и вам надо что-то поправить. Например, изменить какую-то рамку `border`...
+Бывает так, что, написав код, мы через некоторое время к нему возвращаемся, надо что-то поправить. И мы примерно помним, что переменная, в которой хранится нужное вам значение, называется... Ну, скажем, `borderLeftWidth`. Мы ищем в её в коде, не находим, но, разобравшись, обнаруживаем, что на самом деле переменная называлась вот так: `leftBorderWidth`.
-...И вы помните, что переменная, в которой хранится нужное вам значение, называется примерно так: `borderLeftWidth`. Вы ищете ее в коде, не находите, разбираетесь, и обнаруживаете, что на самом деле переменная называлась вот так: `leftBorderWidth`. После чего вносите нужные правки.
+**Если мы ищем переменную с одним именем, а находим -- с другим, то зачастую самый лучший ход -- это *переименовать* переменную, чтобы имя было тем, которое вы искали.**
-**Если вы искали переменную с одним именем, а нашли -- с другим, то самый лучший ход -- это *переименовать* переменную, чтобы имя было тем, которое вы искали.**
-
-То есть, у вас в коде `leftBorderWidth`, а вы ее переименовываете на `borderLeftWidth`.
+То есть, в коде `leftBorderWidth`, а мы её переименуем на ту, которую искали: `borderLeftWidth`.
Зачем? Дело в том, что в следующий раз, когда вы захотите что-то поправить, то вы будете искать по тому же самому имени. Соответственно, это сэкономит вам время.
-Кроме того, поскольку именно это имя переменной пришло вам в голову -- скорее всего, оно больше соответствует хранимым там данным, чем то, которое вы придумали изначально. Исключения бывают, но в любом случае -- такое несовпадение -- это повод задуматься.
+Есть причина и поважнее. Поскольку именно это имя переменной пришло в голову -- скорее всего, оно больше соответствует хранимым там данным, чем то, которое было мы придумали изначально. Исключения бывают, но в любом случае -- такое несовпадение -- это повод задуматься.
+
+Чтобы удобно переименовывать переменную, нужно использовать [хороший редактор JavaScript](/editors), тогда этот процесс будет очень простым и быстрым.
[smart header="Если коротко..."]
Смысл имени переменной -- это "имя на коробке", по которому мы сможем максимально быстро находить нужные нам данные.
diff --git a/1-js/2-first-steps/7-types-intro/article.md b/1-js/2-first-steps/7-types-intro/article.md
index 5bb17032..6f7a242c 100644
--- a/1-js/2-first-steps/7-types-intro/article.md
+++ b/1-js/2-first-steps/7-types-intro/article.md
@@ -57,6 +57,7 @@ str = 'Одинарные кавычки тоже подойдут';
Как правило, такой тип используется для хранения значения типа да/нет, например:
```js
+//+ no-beautify
var checked = true; // поле формы помечено галочкой
checked = false; // поле формы не содержит галочки
```
@@ -84,7 +85,7 @@ var age = null;
```js
//+ run
var x;
-alert(x); // выведет "undefined"
+alert( x ); // выведет "undefined"
```
Можно присвоить `undefined` и в явном виде, хотя это делается редко:
@@ -94,7 +95,7 @@ alert(x); // выведет "undefined"
var x = 123;
x = undefined;
-alert(x); // "undefined"
+alert( x ); // "undefined"
```
В явном виде `undefined` обычно не присваивают, так как это противоречит его смыслу. Для записи в переменную "пустого" или "неизвестного" значения используется `null`.
diff --git a/1-js/2-first-steps/8-operators/1-increment-order/solution.md b/1-js/2-first-steps/8-operators/1-increment-order/solution.md
index de103276..053e8d8d 100644
--- a/1-js/2-first-steps/8-operators/1-increment-order/solution.md
+++ b/1-js/2-first-steps/8-operators/1-increment-order/solution.md
@@ -1,7 +1,7 @@
# Разъяснения
```js
-//+ run
+//+ run no-beautify
var a = 1, b = 1, c, d;
// префиксная форма сначала увеличивает a до 2, а потом возвращает
diff --git a/1-js/2-first-steps/8-operators/1-increment-order/task.md b/1-js/2-first-steps/8-operators/1-increment-order/task.md
index 6489a2af..180d28eb 100644
--- a/1-js/2-first-steps/8-operators/1-increment-order/task.md
+++ b/1-js/2-first-steps/8-operators/1-increment-order/task.md
@@ -5,7 +5,7 @@
Посмотрите, понятно ли вам, почему код ниже работает именно так?
```js
-//+ run
+//+ run no-beautify
var a = 1, b = 1, c, d;
c = ++a; alert(c); // 2
diff --git a/1-js/2-first-steps/8-operators/article.md b/1-js/2-first-steps/8-operators/article.md
index 3a8b7b69..fa8c1f59 100644
--- a/1-js/2-first-steps/8-operators/article.md
+++ b/1-js/2-first-steps/8-operators/article.md
@@ -24,14 +24,14 @@ var x = 1;
*!*
x = -x;
*/!*
-alert( x ); // -1, применили унарный минус
+alert( x ); // -1, применили унарный минус
```
*Бинарным* называется оператор, который применяется к двум операндам. Тот же минус существует и в бинарной форме:
```js
-//+ run
+//+ run no-beautify
var x = 1, y = 3;
alert( y - x ); // 2, бинарный минус
```
@@ -47,7 +47,7 @@ alert( y - x ); // 2, бинарный минус
```js
var a = "моя" + "строка";
-alert(a); // моястрока
+alert( a ); // моястрока
```
Иначе говорят, что "плюс производит конкатенацию (сложение) строк".
@@ -71,7 +71,7 @@ alert( 2 + '1' ); // "21"
```js
//+ run
alert( 2 - '1' ); // 1
-alert( 6 / '2'); // 3
+alert( 6 / '2' ); // 3
```
@@ -109,7 +109,7 @@ alert( apples + oranges ); // "23", так как бинарный плюс ск
var apples = "2";
var oranges = "3";
-alert( +apples + +oranges); // 5, число, оба операнда предварительно преобразованы в числа
+alert( +apples + +oranges ); // 5, число, оба операнда предварительно преобразованы в числа
```
С точки зрения математики такое изобилие плюсов может показаться странным. С точки зрения программирования -- никаких разночтений: сначала выполнятся унарные плюсы, приведут строки к числам, а затем -- бинарный `'+'` их сложит.
@@ -152,7 +152,7 @@ alert( +apples + +oranges); // 5, число, оба операнда предв
```js
var x = 2 * 2 + 1;
-alert(x); // 5
+alert( x ); // 5
```
**Возможно присваивание по цепочке:**
@@ -165,9 +165,9 @@ var a, b, c;
a = b = c = 2 + 2;
*/!*
-alert(a); // 4
-alert(b); // 4
-alert(c); // 4
+alert( a ); // 4
+alert( b ); // 4
+alert( c ); // 4
```
Такое присваивание работает справа-налево, то есть сначала вычислятся самое правое выражение `2+2`, присвоится в `c`, затем выполнится `b = c` и, наконец, `a = b`.
@@ -186,8 +186,8 @@ var b = 2;
var c = 3 - (a = b + 1);
*/!*
-alert(a); // 3
-alert(c); // 0
+alert( a ); // 3
+alert( c ); // 0
```
В примере выше результатом `(a = b + 1)` является значение, которое записывается в `a` (т.е. `3`). Оно используется для вычисления `c`.
@@ -208,9 +208,9 @@ alert(c); // 0
```js
//+ run
-alert(5 % 2); // 1, остаток от деления 5 на 2
-alert(8 % 3); // 2, остаток от деления 8 на 3
-alert(6 % 3); // 0, остаток от деления 6 на 3
+alert( 5 % 2 ); // 1, остаток от деления 5 на 2
+alert( 8 % 3 ); // 2, остаток от деления 8 на 3
+alert( 6 % 3 ); // 0, остаток от деления 6 на 3
```
@@ -223,7 +223,7 @@ alert(6 % 3); // 0, остаток от деления 6 на 3
**Инкремент** `++` увеличивает на 1:
```js
-//+ run
+//+ run no-beautify
var i = 2;
i++; // более короткая запись для i = i + 1.
alert(i); // 3
@@ -233,7 +233,7 @@ alert(i); // 3
**Декремент** `--` уменьшает на 1:
```js
-//+ run
+//+ run no-beautify
var i = 2;
i--; // более короткая запись для i = i - 1.
alert(i); // 1
@@ -283,9 +283,9 @@ alert(a); // *!*1*/!*
```js
//+ run
var i = 0;
-i++;
-++i;
-alert(i); // 2
+i++;
+++i;
+alert( i ); // 2
```
@@ -366,7 +366,7 @@ i++;
```js
var n = 2;
-n = n + 5;
+n = n + 5;
n = n * 2;
```
@@ -378,7 +378,7 @@ var n = 2;
n += 5; // теперь n=7 (работает как n = n + 5)
n *= 2; // теперь n=14 (работает как n = n * 2)
-alert(n); // 14
+alert( n ); // 14
```
Так можно сделать для операторов `+,-,*,/` и бинарных `<<,>>,>>>,&,|,^`.
@@ -388,9 +388,9 @@ alert(n); // 14
```js
//+ run
var n = 2;
-n *= 3 + 5;
+n *= 3 + 5;
-alert(n); // 16 (n = 2 * 8)
+alert( n ); // 16 (n = 2 * 8)
```
@@ -406,7 +406,7 @@ alert(n); // 16 (n = 2 * 8)
a = (5, 6);
*/!*
-alert(a);
+alert( a );
```
Запятая позволяет перечислять выражения, разделяя их запятой `','`. Каждое из них -- вычисляется и отбрасывается, за исключением последнего, которое возвращается.
diff --git a/1-js/2-first-steps/9-comparison/article.md b/1-js/2-first-steps/9-comparison/article.md
index 92570cf8..2440ef6c 100644
--- a/1-js/2-first-steps/9-comparison/article.md
+++ b/1-js/2-first-steps/9-comparison/article.md
@@ -65,7 +65,7 @@ alert( 'Б' > 'А' ); // true
```js
//+ run
-alert('а' > 'Я'); // true, строчные буквы больше прописных
+alert( 'а' > 'Я' ); // true, строчные буквы больше прописных
```
Для корректного сравнения символы должны быть в одинаковом регистре.
@@ -137,7 +137,7 @@ alert( +"2" > +"14" ); // false, теперь правильно
alert( '2' > 1 ); // true, сравнивается как 2 > 1
alert( '01' == 1 ); // true, сравнивается как 1 == 1
alert( false == 0 ); // true, false становится числом 0
-alert( true == 1); // true, так как true становится числом 1.
+alert( true == 1 ); // true, так как true становится числом 1.
```
Тема преобразований типов будет продолжена далее, в главе [](/types-conversion).
@@ -148,7 +148,7 @@ alert( true == 1); // true, так как true становится числом
```js
//+ run
-alert(0 == false); // true
+alert( 0 == false ); // true
```
Та же ситуация с пустой строкой:
@@ -156,7 +156,7 @@ alert(0 == false); // true
```js
//+ run
-alert('' == false); // true
+alert( '' == false ); // true
```
Это естественное следствие того, что операнды разных типов преобразовались к числу. Пустая строка, как и `false`, при преобразовании к числу дают `0`.
@@ -169,7 +169,7 @@ alert('' == false); // true
```js
//+ run
-alert(0 === false); // false, т.к. типы различны
+alert( 0 === false ); // false, т.к. типы различны
```
Строгое сравнение предпочтительно, если мы хотим быть уверены, что "сюрпризов" не будет.
@@ -195,8 +195,8 @@ alert(0 === false); // false, т.к. типы различны
```js
//+ run
-alert(null > 0); // false
-alert(null == 0); // false
+alert( null > 0 ); // false
+alert( null == 0 ); // false
```
Итак, мы получили, что `null` не больше и не равен нулю. А теперь...
@@ -220,9 +220,9 @@ alert(null >= 0); // *!*true*/!*
```js
//+ run
-alert(undefined > 0); // false (1)
-alert(undefined < 0); // false (2)
-alert(undefined == 0); // false (3)
+alert( undefined > 0 ); // false (1)
+alert( undefined < 0 ); // false (2)
+alert( undefined == 0 ); // false (3)
```
diff --git a/1-js/3-writing-js/1-debugging-chrome/article.md b/1-js/3-writing-js/1-debugging-chrome/article.md
index dbe08234..c3b3bd9a 100644
--- a/1-js/3-writing-js/1-debugging-chrome/article.md
+++ b/1-js/3-writing-js/1-debugging-chrome/article.md
@@ -185,7 +185,7 @@ function pow(x, n) {
```js
//+ run
// результат будет виден в консоли
-for(var i=0; i<5; i++) {
+for (var i = 0; i < 5; i++) {
console.log("значение", i);
}
```
diff --git a/1-js/3-writing-js/2-coding-style/1-style-errors/solution.md b/1-js/3-writing-js/2-coding-style/1-style-errors/solution.md
index bcb64956..e2473aa4 100644
--- a/1-js/3-writing-js/2-coding-style/1-style-errors/solution.md
+++ b/1-js/3-writing-js/2-coding-style/1-style-errors/solution.md
@@ -3,6 +3,7 @@
Вы могли заметить следующие недостатки, сверху-вниз:
```js
+//+ no-beautify
function pow(x,n) // <- отсутствует пробел между аргументами
{ // <- фигурная скобка на отдельной строке
var result=1; // <- нет пробелов вокруг знака =
@@ -27,13 +28,13 @@ else // <- можно на одной строке } else {
Исправленный вариант:
```js
-function pow(x, n) {
+function pow(x, n) {
var result = 1;
- for(var i = 0; i < n; i++) {
- result *=x;
+ for (var i = 0; i < n; i++) {
+ result *= x;
}
-
+
return result;
}
@@ -41,7 +42,7 @@ var x = prompt("x?", "");
var n = prompt("n?", "");
if (n < 0) {
- alert('Степень ' + n +
+ alert('Степень ' + n +
'не поддерживается, введите целую степень, большую 0');
} else {
alert( pow(x, n) );
diff --git a/1-js/3-writing-js/2-coding-style/1-style-errors/task.md b/1-js/3-writing-js/2-coding-style/1-style-errors/task.md
index e63e4b90..815fe914 100644
--- a/1-js/3-writing-js/2-coding-style/1-style-errors/task.md
+++ b/1-js/3-writing-js/2-coding-style/1-style-errors/task.md
@@ -5,6 +5,7 @@
Какие недостатки вы видите в стиле этого примера?
```js
+//+ no-beautify
function pow(x,n)
{
var result=1;
diff --git a/1-js/3-writing-js/2-coding-style/article.md b/1-js/3-writing-js/2-coding-style/article.md
index 6e0fd89b..4f2063e6 100644
--- a/1-js/3-writing-js/2-coding-style/article.md
+++ b/1-js/3-writing-js/2-coding-style/article.md
@@ -12,7 +12,7 @@
...
-
```
@@ -205,12 +205,12 @@ var i = 5;
```html
```
diff --git a/1-js/5-functions-closures/2-closures/1-say-phrase-first/solution.md b/1-js/5-functions-closures/2-closures/1-say-phrase-first/solution.md
index 7d7d24e9..ab6567e4 100644
--- a/1-js/5-functions-closures/2-closures/1-say-phrase-first/solution.md
+++ b/1-js/5-functions-closures/2-closures/1-say-phrase-first/solution.md
@@ -2,15 +2,14 @@
```js
//+ run
-
*!*
-say('Вася'); // Что выведет? Не будет ли ошибки?
+say('Вася'); // Что выведет? Не будет ли ошибки?
*/!*
var phrase = 'Привет';
function say(name) {
- alert(name + ", " + phrase);
+ alert( name + ", " + phrase );
}
```
diff --git a/1-js/5-functions-closures/2-closures/1-say-phrase-first/task.md b/1-js/5-functions-closures/2-closures/1-say-phrase-first/task.md
index 37162cd1..fe548c0c 100644
--- a/1-js/5-functions-closures/2-closures/1-say-phrase-first/task.md
+++ b/1-js/5-functions-closures/2-closures/1-say-phrase-first/task.md
@@ -5,15 +5,14 @@
Что будет, если вызов `sayHi('Вася');` стоит в самом-самом начале, в первой строке кода?
```js
-
*!*
-say('Вася'); // Что выведет? Не будет ли ошибки?
+say('Вася'); // Что выведет? Не будет ли ошибки?
*/!*
var phrase = 'Привет';
function say(name) {
- alert(name + ", " + phrase);
+ alert( name + ", " + phrase );
}
```
diff --git a/1-js/5-functions-closures/2-closures/2-which-value-is-modified/task.md b/1-js/5-functions-closures/2-closures/2-which-value-is-modified/task.md
index 9472005a..b9f72a30 100644
--- a/1-js/5-functions-closures/2-closures/2-which-value-is-modified/task.md
+++ b/1-js/5-functions-closures/2-closures/2-which-value-is-modified/task.md
@@ -7,14 +7,14 @@
```js
var value = 0;
-function f() {
+function f() {
if (1) {
value = true;
} else {
var value = false;
}
- alert(value);
+ alert( value );
}
f();
diff --git a/1-js/5-functions-closures/2-closures/3-var-window/solution.md b/1-js/5-functions-closures/2-closures/3-var-window/solution.md
index cdce0ab3..e1609417 100644
--- a/1-js/5-functions-closures/2-closures/3-var-window/solution.md
+++ b/1-js/5-functions-closures/2-closures/3-var-window/solution.md
@@ -3,12 +3,12 @@
```js
//+ run
function test() {
-
- alert(window);
+
+ alert( window );
var window = 5;
- alert(window);
+ alert( window );
}
test();
diff --git a/1-js/5-functions-closures/2-closures/3-var-window/task.md b/1-js/5-functions-closures/2-closures/3-var-window/task.md
index 1aa6c7a9..8c0e1c7d 100644
--- a/1-js/5-functions-closures/2-closures/3-var-window/task.md
+++ b/1-js/5-functions-closures/2-closures/3-var-window/task.md
@@ -6,12 +6,12 @@
```js
function test() {
-
- alert(window);
+
+ alert( window );
var window = 5;
- alert(window);
+ alert( window );
}
test();
diff --git a/1-js/5-functions-closures/2-closures/4-call-inplace/solution.md b/1-js/5-functions-closures/2-closures/4-call-inplace/solution.md
index 204c334e..4f08292e 100644
--- a/1-js/5-functions-closures/2-closures/4-call-inplace/solution.md
+++ b/1-js/5-functions-closures/2-closures/4-call-inplace/solution.md
@@ -1,7 +1,7 @@
Результат - **ошибка**. Попробуйте:
```js
-//+ run
+//+ run no-beautify
var a = 5
(function() {
@@ -14,7 +14,7 @@ var a = 5
JavaScript воспринимает этот код как если бы перевода строки не было:
```js
-//+ run
+//+ run no-beautify
var a = 5(function() {
alert(a)
})()
@@ -25,7 +25,7 @@ var a = 5(function() {
Если точку с запятой поставить, все будет хорошо:
```js
-//+ run
+//+ run no-beautify
var a = 5;
(function() {
diff --git a/1-js/5-functions-closures/2-closures/4-call-inplace/task.md b/1-js/5-functions-closures/2-closures/4-call-inplace/task.md
index 988f0273..aa4c1b4a 100644
--- a/1-js/5-functions-closures/2-closures/4-call-inplace/task.md
+++ b/1-js/5-functions-closures/2-closures/4-call-inplace/task.md
@@ -5,6 +5,7 @@
Каков будет результат выполнения кода? Почему?
```js
+//+ no-beautify
var a = 5
(function() {
diff --git a/1-js/5-functions-closures/2-closures/5-access-outer-variable/task.md b/1-js/5-functions-closures/2-closures/5-access-outer-variable/task.md
index 10e9de72..13e61904 100644
--- a/1-js/5-functions-closures/2-closures/5-access-outer-variable/task.md
+++ b/1-js/5-functions-closures/2-closures/5-access-outer-variable/task.md
@@ -7,8 +7,8 @@
```js
function makeCounter() {
var currentCount = 1;
-
- return function() {
+
+ return function() {
var currentCount;
// можно ли здесь вывести currentCount из внешней функции (равный 1)?
};
diff --git a/1-js/5-functions-closures/2-closures/6-counter-window-variable/solution.md b/1-js/5-functions-closures/2-closures/6-counter-window-variable/solution.md
index fc3e459d..b9b3771c 100644
--- a/1-js/5-functions-closures/2-closures/6-counter-window-variable/solution.md
+++ b/1-js/5-functions-closures/2-closures/6-counter-window-variable/solution.md
@@ -8,9 +8,9 @@
//+ run
var currentCount = 1;
-function makeCounter() {
- return function() {
- return currentCount++;
+function makeCounter() {
+ return function() {
+ return currentCount++;
};
}
diff --git a/1-js/5-functions-closures/2-closures/6-counter-window-variable/task.md b/1-js/5-functions-closures/2-closures/6-counter-window-variable/task.md
index 304e59fd..48068df9 100644
--- a/1-js/5-functions-closures/2-closures/6-counter-window-variable/task.md
+++ b/1-js/5-functions-closures/2-closures/6-counter-window-variable/task.md
@@ -7,9 +7,9 @@
```js
var currentCount = 1;
-function makeCounter() {
- return function() {
- return currentCount++;
+function makeCounter() {
+ return function() {
+ return currentCount++;
};
}
diff --git a/1-js/5-functions-closures/2-closures/article.md b/1-js/5-functions-closures/2-closures/article.md
index 07d6781a..c511312f 100644
--- a/1-js/5-functions-closures/2-closures/article.md
+++ b/1-js/5-functions-closures/2-closures/article.md
@@ -19,7 +19,7 @@
```js
function sayHi(name) {
var phrase = "Привет, " + name;
- alert(phrase);
+ alert( phrase );
}
sayHi('Вася');
@@ -37,7 +37,7 @@ function sayHi(name) {
// LexicalEnvironment = { name: 'Вася', phrase: undefined }
*/!*
var phrase = "Привет, " + name;
- alert(phrase);
+ alert( phrase );
}
sayHi('Вася');
@@ -56,7 +56,7 @@ function sayHi(name) {
*!*
// LexicalEnvironment = { name: 'Вася', phrase: 'Привет, Вася'}
*/!*
- alert(phrase);
+ alert( phrase );
}
sayHi('Вася');
@@ -83,7 +83,7 @@ sayHi('Вася');
var userName = "Вася";
function sayHi() {
- alert(userName); // "Вася"
+ alert( userName ); // "Вася"
}
```
@@ -95,6 +95,7 @@ function sayHi() {
В примере выше таким окружением является `window`, так что создаётся свойство:
```js
+//+ no-beautify
sayHi.[[Scope]] = window
```
@@ -122,7 +123,7 @@ sayHi.[[Scope]] = window
Например, в коде ниже функция `sayHi` берёт `phrase` из внешней области:
```js
-//+ run
+//+ run no-beautify
var phrase = 'Привет';
@@ -161,8 +162,8 @@ function sayHiBye(firstName, lastName) {
*!*
function getFullName() {
- return firstName + " " + lastName;
- }
+ return firstName + " " + lastName;
+ }
*/!*
}
@@ -175,6 +176,7 @@ sayHiBye("Вася", "Пупкин"); // Привет, Вася Пупкин ;
Вложенные функции получают `[[Scope]]` так же, как и глобальные. В нашем случае:
```js
+//+ no-beautify
getFullName.[[Scope]] = объект переменных текущего запуска sayHiBye
```
@@ -187,9 +189,9 @@ getFullName.[[Scope]] = объект переменных текущего за
var phrase = 'Привет';
function say() {
-
+
function go() {
- alert(phrase); // найдёт переменную снаружи
+ alert( phrase ); // найдёт переменную снаружи
}
go();
@@ -214,7 +216,7 @@ function makeCounter() {
*/!*
return function() { // (**)
- return currentCount++;
+ return currentCount++;
};
}
@@ -250,7 +252,7 @@ function makeCounter() {
*!*
// LexicalEnvironment = { currentCount: 1 }
*/!*
-
+
return function() { // [[Scope]] -> LexicalEnvironment (**)
return currentCount++;
};
@@ -288,9 +290,9 @@ function() { // [[Scope]] -> {currentCount: 1}
//+ run
function makeCounter() {
var currentCount = 1;
-
- return function() {
- return currentCount++;
+
+ return function() {
+ return currentCount++;
};
}
@@ -298,7 +300,7 @@ var counter = makeCounter(); // [[Scope]] -> {currentCount: 1}
alert( counter() ); // 1, [[Scope]] -> {currentCount: 1}
alert( counter() ); // 2, [[Scope]] -> {currentCount: 2}
-alert( counter() ); // 3, [[Scope]] -> {currentCount: 3}
+alert( counter() ); // 3, [[Scope]] -> {currentCount: 3}
```
**Переменную во внешней области видимости можно не только читать, но и изменять.**
@@ -330,7 +332,7 @@ alert( counter2() ); // 1, *!*счётчики независимы*/!*
function f() {}
f.test = 5;
-alert(f.test);
+alert( f.test );
```
Свойства функции не стоит путать с переменными и параметрами. Они совершенно никак не связаны. Переменные доступны только внутри функции, они создаются в процессе её выполнения. Это -- использование функции "как функции".
@@ -343,10 +345,10 @@ alert(f.test);
```js
//+ run
-function makeCounter() {
+function makeCounter() {
*!*
- function counter() {
- return counter.currentCount++;
+ function counter() {
+ return counter.currentCount++;
};
counter.currentCount = 1;
*/!*
@@ -354,7 +356,7 @@ function makeCounter() {
return counter;
}
-var counter = makeCounter();
+var counter = makeCounter();
alert( counter() ); // 1
alert( counter() ); // 2
```
@@ -366,7 +368,7 @@ alert( counter() ); // 2
Например, можно взять и поменять счётчик из внешнего кода:
```js
-var counter = makeCounter();
+var counter = makeCounter();
alert( counter() ); // 1
*!*
diff --git a/1-js/5-functions-closures/3-scope-new-function/article.md b/1-js/5-functions-closures/3-scope-new-function/article.md
index 6c49b5a0..51cebe40 100644
--- a/1-js/5-functions-closures/3-scope-new-function/article.md
+++ b/1-js/5-functions-closures/3-scope-new-function/article.md
@@ -73,7 +73,7 @@ getFunc()(); // *!*2*/!*, из LexicalEnvironment функции getFunc
Ну а если внутри функции, создаваемой через `new Function`, всё же нужно использовать какие-то данные -- без проблем, нужно всего лишь предусмотреть соответствующие параметры и передавать их явным образом, например так:
```js
-//+ run untrusted refresh
+//+ run untrusted refresh no-beautify
*!*
var sum = new Function('a, b', ' return a + b; ');
*/!*
diff --git a/1-js/5-functions-closures/4-closures-usage/1-closure-sum/solution.md b/1-js/5-functions-closures/4-closures-usage/1-closure-sum/solution.md
index 48af7992..2e28ae36 100644
--- a/1-js/5-functions-closures/4-closures-usage/1-closure-sum/solution.md
+++ b/1-js/5-functions-closures/4-closures-usage/1-closure-sum/solution.md
@@ -6,8 +6,8 @@
//+ run
function sum(a) {
- return function(b) {
- return a + b; // возьмет a из внешнего LexicalEnvironment
+ return function(b) {
+ return a + b; // возьмет a из внешнего LexicalEnvironment
};
}
diff --git a/1-js/5-functions-closures/4-closures-usage/2-stringbuffer/solution.md b/1-js/5-functions-closures/4-closures-usage/2-stringbuffer/solution.md
index af2beea3..5f946bfb 100644
--- a/1-js/5-functions-closures/4-closures-usage/2-stringbuffer/solution.md
+++ b/1-js/5-functions-closures/4-closures-usage/2-stringbuffer/solution.md
@@ -3,26 +3,28 @@
```js
//+ run
function makeBuffer() {
- var text = '';
-
+ var text = '';
+
return function(piece) {
if (arguments.length == 0) { // вызов без аргументов
return text;
}
- text += piece;
+ text += piece;
};
};
var buffer = makeBuffer();
// добавить значения к буферу
-buffer('Замыкания');
-buffer(' Использовать');
-buffer(' Нужно!');
+buffer('Замыкания');
+buffer(' Использовать');
+buffer(' Нужно!');
alert( buffer() ); // 'Замыкания Использовать Нужно!'
var buffer2 = makeBuffer();
-buffer2(0); buffer2(1); buffer2(0);
+buffer2(0);
+buffer2(1);
+buffer2(0);
alert( buffer2() ); // '010'
```
diff --git a/1-js/5-functions-closures/4-closures-usage/2-stringbuffer/task.md b/1-js/5-functions-closures/4-closures-usage/2-stringbuffer/task.md
index e892ca4a..9f28b7cd 100644
--- a/1-js/5-functions-closures/4-closures-usage/2-stringbuffer/task.md
+++ b/1-js/5-functions-closures/4-closures-usage/2-stringbuffer/task.md
@@ -23,9 +23,9 @@ function makeBuffer() { /* ваш код */ }
var buffer = makeBuffer();
// добавить значения к буферу
-buffer('Замыкания');
-buffer(' Использовать');
-buffer(' Нужно!');
+buffer('Замыкания');
+buffer(' Использовать');
+buffer(' Нужно!');
// получить текущее значение
alert( buffer() ); // Замыкания Использовать Нужно!
@@ -35,7 +35,9 @@ alert( buffer() ); // Замыкания Использовать Нужно!
```js
var buffer = makeBuffer();
-buffer(0); buffer(1); buffer(0);
+buffer(0);
+buffer(1);
+buffer(0);
alert( buffer() ); // '010'
```
diff --git a/1-js/5-functions-closures/4-closures-usage/3-stringbuffer-with-clear/solution.md b/1-js/5-functions-closures/4-closures-usage/3-stringbuffer-with-clear/solution.md
index ae3b8a62..c4c45809 100644
--- a/1-js/5-functions-closures/4-closures-usage/3-stringbuffer-with-clear/solution.md
+++ b/1-js/5-functions-closures/4-closures-usage/3-stringbuffer-with-clear/solution.md
@@ -3,13 +3,13 @@
```js
//+ run
function makeBuffer() {
- var text = '';
-
+ var text = '';
+
function buffer(piece) {
if (arguments.length == 0) { // вызов без аргументов
return text;
}
- text += piece;
+ text += piece;
};
buffer.clear = function() {
diff --git a/1-js/5-functions-closures/4-closures-usage/4-sort-by-field/solution.md b/1-js/5-functions-closures/4-closures-usage/4-sort-by-field/solution.md
index 8ba3409d..43ded8f9 100644
--- a/1-js/5-functions-closures/4-closures-usage/4-sort-by-field/solution.md
+++ b/1-js/5-functions-closures/4-closures-usage/4-sort-by-field/solution.md
@@ -2,24 +2,36 @@
```js
//+ run
-var users = [
- { name: "Вася", surname: 'Иванов', age: 20 },
- { name: "Петя", surname: 'Чапаев', age: 25 },
- { name: "Маша", surname: 'Медведева', age: 18 }
-];
+var users = [{
+ name: "Вася",
+ surname: 'Иванов',
+ age: 20
+}, {
+ name: "Петя",
+ surname: 'Чапаев',
+ age: 25
+}, {
+ name: "Маша",
+ surname: 'Медведева',
+ age: 18
+}];
*!*
function byField(field) {
- return function(a, b) {
- return a[field] > b[field] ? 1: -1;
+ return function(a, b) {
+ return a[field] > b[field] ? 1 : -1;
+ }
}
-}
*/!*
users.sort(byField('name'));
-users.forEach(function(user) { alert(user.name); });
+users.forEach(function(user) {
+ alert( user.name );
+});
users.sort(byField('age'));
-users.forEach(function(user) { alert(user.name); });
+users.forEach(function(user) {
+ alert( user.name );
+});
```
diff --git a/1-js/5-functions-closures/4-closures-usage/4-sort-by-field/task.md b/1-js/5-functions-closures/4-closures-usage/4-sort-by-field/task.md
index 154b2358..36701c23 100644
--- a/1-js/5-functions-closures/4-closures-usage/4-sort-by-field/task.md
+++ b/1-js/5-functions-closures/4-closures-usage/4-sort-by-field/task.md
@@ -5,35 +5,47 @@
У нас есть массив объектов:
```js
-var users = [
- { name: "Вася", surname: 'Иванов', age: 20 },
- { name: "Петя", surname: 'Чапаев', age: 25 },
- { name: "Маша", surname: 'Медведева', age: 18 }
-];
+var users = [{
+ name: "Вася",
+ surname: 'Иванов',
+ age: 20
+}, {
+ name: "Петя",
+ surname: 'Чапаев',
+ age: 25
+}, {
+ name: "Маша",
+ surname: 'Медведева',
+ age: 18
+}];
```
Обычно сортировка по нужному полю происходит так:
```js
// по полю name (Вася, Маша, Петя)
-users.sort(function(a, b) {
- return a.name > b.name ? 1 : -1;
+users.sort(function(a, b) {
+ return a.name > b.name ? 1 : -1;
});
// по полю age (Маша, Вася, Петя)
-users.sort(function(a, b) {
- return a.age > b.age ? 1 : -1;
+users.sort(function(a, b) {
+ return a.age > b.age ? 1 : -1;
});
```
Мы хотели бы упростить синтаксис до одной строки, вот так:
```js
-users.sort(byField('name'));
-users.forEach(function(user) { alert(user.name); }); // Вася, Маша, Петя
+users.sort(byField('name'));
+users.forEach(function(user) {
+ alert( user.name );
+}); // Вася, Маша, Петя
-users.sort(byField('age'));
-users.forEach(function(user) { alert(user.name); }); // Маша, Вася, Петя
+users.sort(byField('age'));
+users.forEach(function(user) {
+ alert( user.name );
+}); // Маша, Вася, Петя
```
То есть, вместо того, чтобы каждый раз писать в `sort` `function...` -- будем использовать `byField(...)`
diff --git a/1-js/5-functions-closures/4-closures-usage/5-filter-through-function/solution.md b/1-js/5-functions-closures/4-closures-usage/5-filter-through-function/solution.md
index 2974267c..114fdd5f 100644
--- a/1-js/5-functions-closures/4-closures-usage/5-filter-through-function/solution.md
+++ b/1-js/5-functions-closures/4-closures-usage/5-filter-through-function/solution.md
@@ -5,8 +5,8 @@
function filter(arr, func) {
var result = [];
- for(var i=0; i=a && x <= b;
- };
-}
+ return function(x) {
+ return x >= a && x <= b;
+ };
+ }
*/!*
var arr = [1, 2, 3, 4, 5, 6, 7];
-alert( filter(arr, inBetween(3,6)) ); // 3,4,5,6
+alert( filter(arr, inBetween(3, 6)) ); // 3,4,5,6
```
# Фильтр inArray
@@ -56,8 +58,8 @@ alert( filter(arr, inBetween(3,6)) ); // 3,4,5,6
function filter(arr, func) {
var result = [];
- for(var i=0; iКнопка
```
@@ -68,13 +68,13 @@ showMessage();
```js
//+ run
(function() {
-
+
// глобальная переменная нашего скрипта
var message = "Привет";
// функция для вывода этой переменной
function showMessage() {
- alert(message);
+ alert( message );
}
// выводим сообщение
@@ -97,8 +97,8 @@ showMessage();
```js
//+ run
(function() {
-
- alert("объявляем локальные переменные, функции, работаем");
+
+ alert( "объявляем локальные переменные, функции, работаем" );
// ...
}());
@@ -111,7 +111,7 @@ showMessage();
```js
//+ run
function() {
- // будет ошибка
+ // будет ошибка
}();
```
@@ -123,7 +123,7 @@ function() {
//+ run
function work() {
// ...
-}(); // syntax error
+}(); // syntax error
```
**Дело в том, что "на месте" разрешено вызывать *только* `Function Expression`.**
@@ -140,7 +140,7 @@ function work() {
Можно показать это другим способом, например поставив перед функцией оператор:
```js
-//+ run
+//+ run no-beautify
+function() {
alert('Вызов на месте');
}();
@@ -178,15 +178,20 @@ function work() {
Функция _.defaults()
добавляет отсутствующие свойства.
```
@@ -196,7 +201,7 @@ alert(_.size(user)); // 2
Вот выдержка из исходного файла:
```js
-//+ run
+//+ run no-beautify
;(function() {
*!*
@@ -255,6 +260,7 @@ var a = 5
Второй файл `lib.js`:
```js
+//+ no-beautify
(function() {
// без точки с запятой в начале
})()
@@ -263,7 +269,7 @@ var a = 5
После объединения в один файл:
```js
-//+ run
+//+ run no-beautify
*!*
var a = 5
*/!*
@@ -285,6 +291,7 @@ var a = 5
Можно оформить модуль и чуть по-другому, например передать значение через `return`:
```js
+//+ no-beautify
var lodash = (function() {
var version;
diff --git a/1-js/5-functions-closures/6-memory-management/article.md b/1-js/5-functions-closures/6-memory-management/article.md
index a808d3d4..31a1c65c 100644
--- a/1-js/5-functions-closures/6-memory-management/article.md
+++ b/1-js/5-functions-closures/6-memory-management/article.md
@@ -41,7 +41,9 @@
Например, была создана ссылка в переменной, и эту переменную тут же перезаписали:
```js
-var user = { name: "Вася" };
+var user = {
+ name: "Вася"
+};
user = null;
```
@@ -87,7 +89,11 @@ function marry(man, woman) {
}
}
-var family = marry({ name: "Василий" }, { name: "Мария"});
+var family = marry({
+ name: "Василий"
+}, {
+ name: "Мария"
+});
```
Функция `marry` принимает два объекта, даёт им ссылки друг на друга и возвращает третий, содержащий ссылки на оба.
@@ -164,7 +170,7 @@ function showTime() {
function f() {
var value = 123;
- function g() { } // g видна только изнутри
+ function g() {} // g видна только изнутри
}
f();
@@ -178,7 +184,7 @@ f();
function f() {
var value = 123;
- function g() { }
+ function g() {}
*!*
return g;
@@ -197,7 +203,7 @@ var g = f(); // функция g будет жить и сохранит ссы
function f() {
var value = Math.random();
- return function() { };
+ return function() {};
}
// 3 функции, каждая ссылается на свой объект переменных,
@@ -212,15 +218,15 @@ var arr = [f(), f(), f()];
function f() {
var value = 123;
- function g() { }
+ function g() {}
return g;
}
-var g = f(); // функция g жива
+var g = f(); // функция g жива
// а значит в памяти остается соответствующий объект переменных f()
-g = null; // ..а вот теперь память будет очищена
+g = null; // ..а вот теперь память будет очищена
```
@@ -241,14 +247,14 @@ g = null; // ..а вот теперь память будет очищена
function f() {
var value = Math.random();
- function g() {
- debugger; // выполните в консоли alert(value); Нет такой переменной!
- }
+ function g() {
+ debugger; // выполните в консоли alert( value ); Нет такой переменной!
+ }
return g;
}
-var g = f();
+var g = f();
g();
```
@@ -263,14 +269,14 @@ var value = "Сюрприз";
function f() {
var value = "самое близкое значение";
- function g() {
- debugger; // выполните в консоли alert(value); Сюрприз!
- }
+ function g() {
+ debugger; // выполните в консоли alert( value ); Сюрприз!
+ }
return g;
}
-var g = f();
+var g = f();
g();
```
@@ -290,27 +296,27 @@ g();
```js
//+ run
-function sumTo(n) { // обычный цикл 1+2+...+n
+function sumTo(n) { // обычный цикл 1+2+...+n
var result = 0;
- for (var i=1; i<=n; i++) {
+ for (var i = 1; i <= n; i++) {
result += i;
}
return result;
}
function sumToRec(n) { // рекурсия sumToRec(n) = n+SumToRec(n-1)
- return n == 1 ? 1 : n + sumToRec(n-1);
+ return n == 1 ? 1 : n + sumToRec(n - 1);
}
var timeLoop = performance.now();
-for (var i=1;i<1000;i++) sumTo(1000); // цикл
-timeLoop = performance.now() - timeLoop;
+for (var i = 1; i < 1000; i++) sumTo(1000); // цикл
+timeLoop = performance.now() - timeLoop;
var timeRecursion = performance.now();
-for (var i=1;i<1000;i++) sumToRec(1000); // рекурсия
+for (var i = 1; i < 1000; i++) sumToRec(1000); // рекурсия
timeRecursion = performance.now() - timeRecursion;
-alert("Разница в " + ( timeRecursion / timeLoop ) + " раз");
+alert( "Разница в " + (timeRecursion / timeLoop) + " раз" );
```
Различие в скорости на таком примере может составлять, в зависимости от интерпретатора, 2-10 раз.
diff --git a/1-js/5-functions-closures/7-with/1-with-function/solution.md b/1-js/5-functions-closures/7-with/1-with-function/solution.md
index fd30089e..d4a5284b 100644
--- a/1-js/5-functions-closures/7-with/1-with-function/solution.md
+++ b/1-js/5-functions-closures/7-with/1-with-function/solution.md
@@ -4,10 +4,14 @@
```js
//+ run
-function f() { alert(1) }
+function f() {
+ alert(1)
+}
-var obj = {
- f: function() { alert(2) }
+var obj = {
+ f: function() {
+ alert(2)
+ }
};
with(obj) {
diff --git a/1-js/5-functions-closures/7-with/1-with-function/task.md b/1-js/5-functions-closures/7-with/1-with-function/task.md
index 05e73c4e..bdf540ec 100644
--- a/1-js/5-functions-closures/7-with/1-with-function/task.md
+++ b/1-js/5-functions-closures/7-with/1-with-function/task.md
@@ -5,10 +5,14 @@
Какая из функций будет вызвана?
```js
-function f() { alert(1) }
+function f() {
+ alert(1)
+}
-var obj = {
- f: function() { alert(2) }
+var obj = {
+ f: function() {
+ alert(2)
+ }
};
with(obj) {
diff --git a/1-js/5-functions-closures/7-with/2-with-variables/solution.md b/1-js/5-functions-closures/7-with/2-with-variables/solution.md
index 79d5f180..531c8a81 100644
--- a/1-js/5-functions-closures/7-with/2-with-variables/solution.md
+++ b/1-js/5-functions-closures/7-with/2-with-variables/solution.md
@@ -11,7 +11,9 @@ var a = 1;
var b;
*/!*
-var obj = { b: 2 }
+var obj = {
+ b: 2
+}
with(obj) {
alert( a + b );
diff --git a/1-js/5-functions-closures/7-with/2-with-variables/task.md b/1-js/5-functions-closures/7-with/2-with-variables/task.md
index c979fc47..13705a1d 100644
--- a/1-js/5-functions-closures/7-with/2-with-variables/task.md
+++ b/1-js/5-functions-closures/7-with/2-with-variables/task.md
@@ -7,7 +7,9 @@
```js
var a = 1;
-var obj = { b: 2 };
+var obj = {
+ b: 2
+};
with(obj) {
var b;
diff --git a/1-js/5-functions-closures/7-with/article.md b/1-js/5-functions-closures/7-with/article.md
index cc729b20..9c6434ff 100644
--- a/1-js/5-functions-closures/7-with/article.md
+++ b/1-js/5-functions-closures/7-with/article.md
@@ -9,7 +9,7 @@
```js
with(obj) {
- ... код ...
+ ...код...
}
```
@@ -23,12 +23,14 @@ with(obj) {
//+ run
var a = 5;
-var obj = { a : 10 };
+var obj = {
+ a: 10
+};
*!*
with(obj) {
- alert(a); // 10, из obj
-}
+ alert( a ); // 10, из obj
+ }
*/!*
```
@@ -38,12 +40,14 @@ with(obj) {
//+ run
var b = 1;
-var obj = { a : 10 };
+var obj = {
+ a: 10
+};
*!*
with(obj) {
- alert(b); // 1, из window
-}
+ alert( b ); // 1, из window
+ }
*/!*
```
@@ -64,7 +68,7 @@ var obj = {
with(obj) {
with(size) { // size будет взят из obj
*!*
- alert( width*height / weight ); // width,height из size, weight из obj
+ alert( width * height / weight ); // width,height из size, weight из obj
*/!*
}
}
@@ -81,14 +85,16 @@ with(obj) {
```js
//+ run
-var obj = { a : 10 }
+var obj = {
+ a: 10
+}
*!*
with(obj) {
- a = 20;
-}
+ a = 20;
+ }
*/!*
-alert(obj.a); // 20, переменная была изменена в объекте
+alert( obj.a ); // 20, переменная была изменена в объекте
```
## Почему отказались от with?
@@ -104,15 +110,17 @@ alert(obj.a); // 20, переменная была изменена в объе
```js
//+ run
-var obj = { weight: 10 };
+var obj = {
+ weight: 10
+};
with(obj) {
weight = 20; // (1)
- size = 35; // (2)
+ size = 35; // (2)
}
-alert(obj.size);
-alert(window.size);
+alert( obj.size );
+alert( window.size );
```
В строке `(2)` присваивается свойство, отсутствующее в `obj`. В результате интерпретатор, не найдя его, создает новую глобальную переменную `window.size`.
@@ -134,20 +142,20 @@ function fast() {
i++;
}
-function slow() {
+function slow() {
with(i) {}
i++;
}
var time = performance.now();
-while(i < 1000000) fast();
-alert("Без with: " + (performance.now() - time));
+while (i < 1000000) fast();
+alert( "Без with: " + (performance.now() - time) );
var time = performance.now();
-i=0;
-while(i < 1000000) slow();
-alert("С with: " + (performance.now() - time));
+i = 0;
+while (i < 1000000) slow();
+alert( "С with: " + (performance.now() - time) );
```
diff --git a/1-js/6-objects-more/1-object-methods/1-call-array-this/solution.md b/1-js/6-objects-more/1-object-methods/1-call-array-this/solution.md
index f3b7cde8..dad88eea 100644
--- a/1-js/6-objects-more/1-object-methods/1-call-array-this/solution.md
+++ b/1-js/6-objects-more/1-object-methods/1-call-array-this/solution.md
@@ -6,7 +6,9 @@
//+ run
var arr = ["a", "b"];
-arr.push( function() { alert(this); } )
+arr.push(function() {
+ alert( this );
+})
arr[2](); // "a","b",function
```
diff --git a/1-js/6-objects-more/1-object-methods/1-call-array-this/task.md b/1-js/6-objects-more/1-object-methods/1-call-array-this/task.md
index a46c5456..6ab74bfc 100644
--- a/1-js/6-objects-more/1-object-methods/1-call-array-this/task.md
+++ b/1-js/6-objects-more/1-object-methods/1-call-array-this/task.md
@@ -7,8 +7,10 @@
```js
var arr = ["a", "b"];
-arr.push( function() { alert(this); } )
+arr.push(function() {
+ alert( this );
+})
-arr[2](); // ?
+arr[2](); // ?
```
diff --git a/1-js/6-objects-more/1-object-methods/2-check-syntax/solution.md b/1-js/6-objects-more/1-object-methods/2-check-syntax/solution.md
index b73f4b2d..b030823d 100644
--- a/1-js/6-objects-more/1-object-methods/2-check-syntax/solution.md
+++ b/1-js/6-objects-more/1-object-methods/2-check-syntax/solution.md
@@ -5,10 +5,12 @@
```js
//+ run
var obj = {
- go: function() { alert(this) }
+ go: function() {
+ alert(this)
+ }
}
-(obj.go)() // error!
+(obj.go)() // error!
```
Причем сообщение об ошибке в большинстве браузеров не даёт понять, что на самом деле не так.
@@ -18,6 +20,7 @@ var obj = {
JavaScript игнорирует перевод строки перед скобкой `(obj.go)()` и читает этот код как:
```js
+//+ no-beautify
var obj = { go:... }(obj.go)()
```
diff --git a/1-js/6-objects-more/1-object-methods/2-check-syntax/task.md b/1-js/6-objects-more/1-object-methods/2-check-syntax/task.md
index f8fe23ec..44a93141 100644
--- a/1-js/6-objects-more/1-object-methods/2-check-syntax/task.md
+++ b/1-js/6-objects-more/1-object-methods/2-check-syntax/task.md
@@ -5,6 +5,7 @@
Каков будет результат этого кода?
```js
+//+ no-beautify
var obj = {
go: function() { alert(this) }
}
diff --git a/1-js/6-objects-more/1-object-methods/3-why-this/solution.md b/1-js/6-objects-more/1-object-methods/3-why-this/solution.md
index b7e4eea6..693d3944 100644
--- a/1-js/6-objects-more/1-object-methods/3-why-this/solution.md
+++ b/1-js/6-objects-more/1-object-methods/3-why-this/solution.md
@@ -4,6 +4,7 @@
Здесь не просто вызов `obj.method()`, а более сложный вызов вида `(выражение).method()`. Такой вызов работает, как если бы он был разбит на две строки:
```js
+//+ no-beautify
f = obj.go; // сначала вычислить выражение
f(); // потом вызвать то, что получилось
```
diff --git a/1-js/6-objects-more/1-object-methods/3-why-this/task.md b/1-js/6-objects-more/1-object-methods/3-why-this/task.md
index 5ff97a04..486c3eb7 100644
--- a/1-js/6-objects-more/1-object-methods/3-why-this/task.md
+++ b/1-js/6-objects-more/1-object-methods/3-why-this/task.md
@@ -5,7 +5,7 @@
Вызовы `(1)` и `(2)` в примере ниже работают не так, как `(3)` и `(4)`:
```js
-//+ run
+//+ run no-beautify
"use strict"
var obj, f;
diff --git a/1-js/6-objects-more/1-object-methods/4-object-property-this/solution.md b/1-js/6-objects-more/1-object-methods/4-object-property-this/solution.md
index e26f24d8..82f562d9 100644
--- a/1-js/6-objects-more/1-object-methods/4-object-property-this/solution.md
+++ b/1-js/6-objects-more/1-object-methods/4-object-property-this/solution.md
@@ -6,13 +6,13 @@ var name = "";
var user = {
name: "Василий",
-
+
*!*
export: this // (*)
*/!*
-};
+};
-alert(user.export.name);
+alert( user.export.name );
```
Объявление объекта само по себе не влияет на `this`. Никаких функций, которые могли бы повлиять на контекст, здесь нет.
diff --git a/1-js/6-objects-more/1-object-methods/4-object-property-this/task.md b/1-js/6-objects-more/1-object-methods/4-object-property-this/task.md
index 95421894..6b2ec0ac 100644
--- a/1-js/6-objects-more/1-object-methods/4-object-property-this/task.md
+++ b/1-js/6-objects-more/1-object-methods/4-object-property-this/task.md
@@ -9,10 +9,10 @@ var name = "";
var user = {
name: "Василий",
-
- export: this
-};
-alert(user.export.name);
+ export: this
+};
+
+alert( user.export.name );
```
diff --git a/1-js/6-objects-more/1-object-methods/5-return-this/task.md b/1-js/6-objects-more/1-object-methods/5-return-this/task.md
index e9065794..03ebd8cb 100644
--- a/1-js/6-objects-more/1-object-methods/5-return-this/task.md
+++ b/1-js/6-objects-more/1-object-methods/5-return-this/task.md
@@ -9,13 +9,13 @@ var name = "";
var user = {
name: "Василий",
-
- export: function() {
+
+ export: function() {
return this;
}
-};
+};
-alert(user.export().name);
+alert( user.export().name );
```
diff --git a/1-js/6-objects-more/1-object-methods/6-return-object-this/task.md b/1-js/6-objects-more/1-object-methods/6-return-object-this/task.md
index fe585cfa..b78e6553 100644
--- a/1-js/6-objects-more/1-object-methods/6-return-object-this/task.md
+++ b/1-js/6-objects-more/1-object-methods/6-return-object-this/task.md
@@ -9,15 +9,15 @@ var name = "";
var user = {
name: "Василий",
-
+
export: function() {
- return {
+ return {
value: this
};
}
-};
+};
-alert(user.export().value.name);
+alert( user.export().value.name );
```
diff --git a/1-js/6-objects-more/1-object-methods/7-calculator/task.md b/1-js/6-objects-more/1-object-methods/7-calculator/task.md
index d45d1b1e..5e5790fc 100644
--- a/1-js/6-objects-more/1-object-methods/7-calculator/task.md
+++ b/1-js/6-objects-more/1-object-methods/7-calculator/task.md
@@ -10,8 +10,8 @@
```js
-var calculator = {
- ... ваш код...
+var calculator = {
+ ...ваш код...
}
calculator.read();
diff --git a/1-js/6-objects-more/1-object-methods/8-chain-calls/solution.md b/1-js/6-objects-more/1-object-methods/8-chain-calls/solution.md
index d412c95e..8d89b88e 100644
--- a/1-js/6-objects-more/1-object-methods/8-chain-calls/solution.md
+++ b/1-js/6-objects-more/1-object-methods/8-chain-calls/solution.md
@@ -4,20 +4,20 @@
//+ run
var ladder = {
step: 0,
- up: function() {
- this.step++;
+ up: function() {
+ this.step++;
return this;
},
- down: function() {
- this.step--;
+ down: function() {
+ this.step--;
return this;
},
- showStep: function() {
- alert(this.step);
+ showStep: function() {
+ alert( this.step );
return this;
}
}
-ladder.up().up().down().up().down().showStep(); // 1
+ladder.up().up().down().up().down().showStep(); // 1
```
diff --git a/1-js/6-objects-more/1-object-methods/8-chain-calls/task.md b/1-js/6-objects-more/1-object-methods/8-chain-calls/task.md
index 0fa9218a..fb2a512b 100644
--- a/1-js/6-objects-more/1-object-methods/8-chain-calls/task.md
+++ b/1-js/6-objects-more/1-object-methods/8-chain-calls/task.md
@@ -7,14 +7,14 @@
```js
var ladder = {
step: 0,
- up: function() { // вверх по лестнице
+ up: function() { // вверх по лестнице
this.step++;
},
- down: function() { // вниз по лестнице
+ down: function() { // вниз по лестнице
this.step--;
},
showStep: function() { // вывести текущую ступеньку
- alert(this.step);
+ alert( this.step );
}
};
```
@@ -31,7 +31,7 @@ ladder.showStep(); // 1
Модифицируйте код методов объекта, чтобы вызовы можно было делать цепочкой, вот так:
```js
-ladder.up().up().down().up().down().showStep(); // 1
+ladder.up().up().down().up().down().showStep(); // 1
```
Такой подход называется "чейнинг" (chaining) и используется, например, во фреймворке jQuery.
diff --git a/1-js/6-objects-more/1-object-methods/article.md b/1-js/6-objects-more/1-object-methods/article.md
index 4741b3bc..4a70f595 100644
--- a/1-js/6-objects-more/1-object-methods/article.md
+++ b/1-js/6-objects-more/1-object-methods/article.md
@@ -16,7 +16,7 @@ var user = {
// метод
*/!*
sayHi: function() {
- alert('Привет!');
+ alert( 'Привет!' );
}
};
@@ -101,7 +101,7 @@ admin.sayHi(); // упс! внутри sayHi обращение по старо
Через `this` метод может не только обратиться к любому свойству объекта, но и передать куда-то ссылку на сам объект целиком:
```js
-//+ run
+//+ run no-beautify
var user = {
name: 'Василий',
@@ -138,7 +138,7 @@ function sayHi() {
**Если одну и ту же функцию запускать в контексте разных объектов, она будет получать разный `this`:**
```js
-//+ run
+//+ run no-beautify
var user = { firstName: "Вася" };
var admin = { firstName: "Админ" };
@@ -169,8 +169,8 @@ admin['g'](); // Админ (не важно, доступ к объекту ч
```js
//+ run
-function func() {
- alert(this); // выведет [object Window] или [object global]
+function func() {
+ alert( this ); // выведет [object Window] или [object global]
}
func();
@@ -182,9 +182,9 @@ func();
```js
//+ run
-function func() {
+function func() {
"use strict";
- alert(this); // выведет undefined (кроме IE9-)
+ alert( this ); // выведет undefined (кроме IE9-)
}
func();
@@ -199,7 +199,7 @@ func();
Любой более хитрый вызов приведёт к потере контекста, например:
```js
-//+ run
+//+ run no-beautify
var user = {
name: "Вася",
hi: function() { alert(this.name); },
diff --git a/1-js/6-objects-more/2-object-conversion/1-array-equals-string/solution.md b/1-js/6-objects-more/2-object-conversion/1-array-equals-string/solution.md
index a0c488b5..b7a70199 100644
--- a/1-js/6-objects-more/2-object-conversion/1-array-equals-string/solution.md
+++ b/1-js/6-objects-more/2-object-conversion/1-array-equals-string/solution.md
@@ -9,7 +9,7 @@ P.S.
```js
//+ run
-alert( ['x','y'] == 'x,y' ); // true
+alert( ['x', 'y'] == 'x,y' ); // true
alert( [] == '' ); // true
```
diff --git a/1-js/6-objects-more/2-object-conversion/2-tostring-valueof/task.md b/1-js/6-objects-more/2-object-conversion/2-tostring-valueof/task.md
index 2785680a..86bd17cb 100644
--- a/1-js/6-objects-more/2-object-conversion/2-tostring-valueof/task.md
+++ b/1-js/6-objects-more/2-object-conversion/2-tostring-valueof/task.md
@@ -8,17 +8,17 @@
```js
var foo = {
- toString: function () {
- return 'foo';
- },
- valueOf: function () {
- return 2;
- }
+ toString: function() {
+ return 'foo';
+ },
+ valueOf: function() {
+ return 2;
+ }
};
-alert(foo);
-alert(foo + 1);
-alert(foo + "3");
+alert( foo );
+alert( foo + 1 );
+alert( foo + "3" );
```
Подумайте, прежде чем ответить.
\ No newline at end of file
diff --git a/1-js/6-objects-more/2-object-conversion/3-compare-empty-arrays/task.md b/1-js/6-objects-more/2-object-conversion/3-compare-empty-arrays/task.md
index 3883d1ef..6945834b 100644
--- a/1-js/6-objects-more/2-object-conversion/3-compare-empty-arrays/task.md
+++ b/1-js/6-objects-more/2-object-conversion/3-compare-empty-arrays/task.md
@@ -6,7 +6,7 @@
```js
//+ run
-alert( [] == [] ); // false
+alert( [] == [] ); // false
alert( [] == ![] ); // true
```
diff --git a/1-js/6-objects-more/2-object-conversion/4-object-types-conversion-questions/solution.md b/1-js/6-objects-more/2-object-conversion/4-object-types-conversion-questions/solution.md
index 687ed94a..3d7c6689 100644
--- a/1-js/6-objects-more/2-object-conversion/4-object-types-conversion-questions/solution.md
+++ b/1-js/6-objects-more/2-object-conversion/4-object-types-conversion-questions/solution.md
@@ -1,6 +1,7 @@
```js
+//+ no-beautify
new Date(0) - 0 = 0 // (1)
new Array(1)[0] + "" = "undefined" // (2)
({})[0]
= undefined // (3)
@@ -24,6 +25,7 @@ new Array(1)[0] + "" = "undefined" // (2)
Если это непонятно, то посмотрите на такой пример:
```js
+//+ no-beautify
alert( [1,[0],2][1] );
```
diff --git a/1-js/6-objects-more/2-object-conversion/4-object-types-conversion-questions/task.md b/1-js/6-objects-more/2-object-conversion/4-object-types-conversion-questions/task.md
index e85a68bc..85f767a5 100644
--- a/1-js/6-objects-more/2-object-conversion/4-object-types-conversion-questions/task.md
+++ b/1-js/6-objects-more/2-object-conversion/4-object-types-conversion-questions/task.md
@@ -5,6 +5,7 @@
Подумайте, какой результат будет у выражений ниже. Когда закончите -- сверьтесь с решением.
```js
+//+ no-beautify
new Date(0) - 0
new Array(1)[0] + ""
({})[0]
diff --git a/1-js/6-objects-more/2-object-conversion/5-sum-many-brackets/solution.md b/1-js/6-objects-more/2-object-conversion/5-sum-many-brackets/solution.md
index c670bd4d..4b36c185 100644
--- a/1-js/6-objects-more/2-object-conversion/5-sum-many-brackets/solution.md
+++ b/1-js/6-objects-more/2-object-conversion/5-sum-many-brackets/solution.md
@@ -13,23 +13,25 @@
```js
//+ run
function sum(a) {
-
+
var currentSum = a;
-
+
function f(b) {
currentSum += b;
return f;
}
-
- f.toString = function() { return currentSum; };
-
+
+ f.toString = function() {
+ return currentSum;
+ };
+
return f;
}
-alert( sum(1)(2) ); // 3
-alert( sum(5)(-1)(2) ); // 6
-alert( sum(6)(-1)(-2)(-3) ); // 0
-alert( sum(0)(1)(2)(3)(4)(5) ); // 15
+alert( sum(1)(2) ); // 3
+alert( sum(5)(-1)(2) ); // 6
+alert( sum(6)(-1)(-2)(-3) ); // 0
+alert( sum(0)(1)(2)(3)(4)(5) ); // 15
```
При внимательном взгляде на решение легко заметить, что функция `sum` срабатывает только один раз. Она возвращает функцию `f`.
diff --git a/1-js/6-objects-more/2-object-conversion/article.md b/1-js/6-objects-more/2-object-conversion/article.md
index c5340406..9e52cbdd 100644
--- a/1-js/6-objects-more/2-object-conversion/article.md
+++ b/1-js/6-objects-more/2-object-conversion/article.md
@@ -22,8 +22,8 @@
```js
//+ run
-if ( {} && [] ) {
- alert("Все объекты - true!"); // alert сработает
+if ({} && []) {
+ alert( "Все объекты - true!" ); // alert сработает
}
```
@@ -33,11 +33,11 @@ if ( {} && [] ) {
```js
//+ run
-var user = {
- firstName: 'Василий'
+var user = {
+ firstName: 'Василий'
};
-alert(user); // [object Object]
+alert( user ); // [object Object]
```
Как видно, содержимое объекта не вывелось. Это потому, что стандартным строковым представлением пользовательского объекта является строка `"[object Object]"`.
@@ -68,10 +68,12 @@ alert( user ); // Пользователь Василий
```js
//+ run
var obj = {
- toString: function() { return 123; }
+ toString: function() {
+ return 123;
+ }
};
-alert(obj); // 123
+alert( obj ); // 123
```
Поэтому мы и называем его здесь *"строковое преобразование"*, а не "преобразование к строке".
@@ -81,9 +83,9 @@ alert(obj); // 123
```js
//+ run
-alert( [1,2] ); // toString для массивов выводит список элементов "1,2"
+alert( [1, 2] ); // toString для массивов выводит список элементов "1,2"
alert( new Date ); // toString для дат выводит дату в виде строки
-alert( function() { } ); // toString для функции выводит её код
+alert( function() {} ); // toString для функции выводит её код
```
## Численное преобразование
@@ -134,11 +136,13 @@ alert( +new Date() ); // valueOf: кол-во миллисекунд, проше
```js
//+ run
-var obj = {
- valueOf: function() { return 1; }
+var obj = {
+ valueOf: function() {
+ return 1;
+ }
};
-alert(obj == true); // true
+alert( obj == true ); // true
```
Объект `obj` был сначала преобразован в примитив, используя численное преобразование, получилось `1 == true`.
@@ -149,25 +153,31 @@ alert(obj == true); // true
```js
//+ run
-var obj = {
- valueOf: function() { return 1; }
+var obj = {
+ valueOf: function() {
+ return 1;
+ }
};
-alert(obj + "test"); // 1test
+alert( obj + "test" ); // 1test
```
Или вот, для разности объектов:
```js
//+ run
-var a = {
- valueOf: function() { return "1"; }
+var a = {
+ valueOf: function() {
+ return "1";
+ }
};
-var b = {
- valueOf: function() { return "2"; }
+var b = {
+ valueOf: function() {
+ return "2";
+ }
};
-alert(a - b); // "1" - "2" = -1
+alert( a - b ); // "1" - "2" = -1
```
[warn header="Исключение: `Date`"]
@@ -194,9 +204,9 @@ alert( +new Date ); // число миллисекунд
```js
//+ run
-var value = new Boolean(false);
-if ( value ) {
- alert(true); // сработает!
+var value = new Boolean(false);
+if (value) {
+ alert( true ); // сработает!
}
```
@@ -204,14 +214,14 @@ if ( value ) {
```js
//+ run
-var value = new Boolean(false);
+var value = new Boolean(false);
*!*
-alert(value); // выводит false, все ок..
+alert( value ); // выводит false, все ок..
*/!*
-if ( value ) {
- alert(true); // ..но тогда почему выполняется alert в if ?!?
+if (value) {
+ alert( true ); // ..но тогда почему выполняется alert в if ?!?
}
```
@@ -236,6 +246,7 @@ if ( value ) {
Заметим, для полноты картины, что некоторые тесты знаний в интернет предлагают вопросы типа:
```js
+//+ no-beautify
{}[0] // чему равно?
{} + {} // а так?
```
@@ -252,6 +263,7 @@ if ( value ) {
А если команду изъять, то будет пустой блок `{}`, который ничего не делает. Два примера выше как раз содержат пустой блок в начале, который ничего не делает. Иначе говоря:
```js
+//+ no-beautify
{}[0] // то же что и: [0]
{} + {} // то же что и: + {}
```
diff --git a/1-js/6-objects-more/3-constructor-new/1-two-functions-one-object/solution.md b/1-js/6-objects-more/3-constructor-new/1-two-functions-one-object/solution.md
index 2dcc843b..5b27cec2 100644
--- a/1-js/6-objects-more/3-constructor-new/1-two-functions-one-object/solution.md
+++ b/1-js/6-objects-more/3-constructor-new/1-two-functions-one-object/solution.md
@@ -5,7 +5,7 @@
Например, они могут вернуть один и тот же объект `obj`, определённый снаружи:
```js
-//+ run
+//+ run no-beautify
var obj = {};
function A() { return obj; }
diff --git a/1-js/6-objects-more/3-constructor-new/1-two-functions-one-object/task.md b/1-js/6-objects-more/3-constructor-new/1-two-functions-one-object/task.md
index a70741db..72c4e8eb 100644
--- a/1-js/6-objects-more/3-constructor-new/1-two-functions-one-object/task.md
+++ b/1-js/6-objects-more/3-constructor-new/1-two-functions-one-object/task.md
@@ -5,6 +5,7 @@
Возможны ли такие функции `A` и `B` в примере ниже, что соответствующие объекты `a,b` равны (см. код ниже)?
```js
+//+ no-beautify
function A() { ... }
function B() { ... }
diff --git a/1-js/6-objects-more/3-constructor-new/2-calculator-constructor/solution.md b/1-js/6-objects-more/3-constructor-new/2-calculator-constructor/solution.md
index 41051702..a78010d9 100644
--- a/1-js/6-objects-more/3-constructor-new/2-calculator-constructor/solution.md
+++ b/1-js/6-objects-more/3-constructor-new/2-calculator-constructor/solution.md
@@ -5,7 +5,7 @@
function Calculator() {
this.read = function() {
- this.a = +prompt('a?', 0);
+ this.a = +prompt('a?', 0);
this.b = +prompt('b?', 0);
};
diff --git a/1-js/6-objects-more/3-constructor-new/4-calculator-extendable/solution.md b/1-js/6-objects-more/3-constructor-new/4-calculator-extendable/solution.md
index 80b6a8a0..3e5f26e5 100644
--- a/1-js/6-objects-more/3-constructor-new/4-calculator-extendable/solution.md
+++ b/1-js/6-objects-more/3-constructor-new/4-calculator-extendable/solution.md
@@ -20,7 +20,7 @@ function Calculator() {
op = split[1],
b = +split[2]
- if(!methods[op] || isNaN(a) || isNaN(b)) {
+ if (!methods[op] || isNaN(a) || isNaN(b)) {
return NaN;
}
@@ -45,7 +45,7 @@ calc.addMethod("**", function(a, b) {
});
var result = calc.calculate("2 ** 3");
-alert(result); // 8
+alert( result ); // 8
```
diff --git a/1-js/6-objects-more/3-constructor-new/4-calculator-extendable/task.md b/1-js/6-objects-more/3-constructor-new/4-calculator-extendable/task.md
index 89e61cc9..244a932c 100644
--- a/1-js/6-objects-more/3-constructor-new/4-calculator-extendable/task.md
+++ b/1-js/6-objects-more/3-constructor-new/4-calculator-extendable/task.md
@@ -13,7 +13,7 @@
```js
var calc = new Calculator;
-alert(calc.calculate("3 + 7")); // 10
+alert( calc.calculate("3 + 7") ); // 10
```
@@ -23,12 +23,18 @@ alert(calc.calculate("3 + 7")); // 10
```js
var powerCalc = new Calculator;
-powerCalc.addMethod("*", function(a, b) { return a * b; });
-powerCalc.addMethod("/", function(a, b) { return a / b; });
-powerCalc.addMethod("**", function(a, b) { return Math.pow(a, b); });
+powerCalc.addMethod("*", function(a, b) {
+ return a * b;
+});
+powerCalc.addMethod("/", function(a, b) {
+ return a / b;
+});
+powerCalc.addMethod("**", function(a, b) {
+ return Math.pow(a, b);
+});
var result = powerCalc.calculate("2 ** 3");
-alert(result); // 8
+alert( result ); // 8
```
diff --git a/1-js/6-objects-more/3-constructor-new/article.md b/1-js/6-objects-more/3-constructor-new/article.md
index 00eb2581..e98feff0 100644
--- a/1-js/6-objects-more/3-constructor-new/article.md
+++ b/1-js/6-objects-more/3-constructor-new/article.md
@@ -13,7 +13,7 @@
```js
function Animal(name) {
this.name = name;
- this.canWalk = true;
+ this.canWalk = true;
}
*!*
@@ -52,7 +52,7 @@ function Animal(name) {
// в this пишем свойства, методы
this.name = name;
- this.canWalk = true;
+ this.canWalk = true;
*!*
// return this
@@ -75,7 +75,7 @@ function Animal(name) {
Например, возврат объекта:
```js
-//+ run
+//+ run no-beautify
function BigAnimal() {
this.name = "Мышь";
@@ -97,7 +97,7 @@ function BigAnimal() {
return "Годзилла"; // <-- возвратим примитив
}
-alert( new BigAnimal().name ); // Мышь, получили this (а Годзилла пропал)
+alert( new BigAnimal().name ); // Мышь, получили this (а Годзилла пропал)
```
Эта особенность работы `new` прописана в стандарте, но используется она весьма редко.
@@ -126,9 +126,9 @@ var animal = new BigAnimal();
//+ run
function User(name) {
this.name = name;
-
+
this.sayHi = function() {
- alert("Моё имя: " + this.name);
+ alert( "Моё имя: " + this.name );
};
}
@@ -156,15 +156,15 @@ function User(firstName, lastName) {
*!*
// вспомогательная переменная
var phrase = "Привет";
-
+
// вспомогательная вложенная функция
- function getFullName() {
- return firstName + " " + lastName;
- }
+ function getFullName() {
+ return firstName + " " + lastName;
+ }
*/!*
-
+
this.sayHi = function() {
- alert(phrase + ", " + getFullName()); // использование
+ alert( phrase + ", " + getFullName() ); // использование
};
}
diff --git a/1-js/6-objects-more/4-descriptors-getters-setters/1-replace-property-getter/solution.md b/1-js/6-objects-more/4-descriptors-getters-setters/1-replace-property-getter/solution.md
index 1719a50b..f00b3bc8 100644
--- a/1-js/6-objects-more/4-descriptors-getters-setters/1-replace-property-getter/solution.md
+++ b/1-js/6-objects-more/4-descriptors-getters-setters/1-replace-property-getter/solution.md
@@ -1,7 +1,6 @@
```js
//+ run
-
function User(fullName) {
this.fullName = fullName;
@@ -38,12 +37,12 @@ function User(fullName) {
var vasya = new User("Василий Попкин");
// чтение firstName/lastName
-alert(vasya.firstName); // Василий
-alert(vasya.lastName); // Попкин
+alert( vasya.firstName ); // Василий
+alert( vasya.lastName ); // Попкин
// запись в lastName
vasya.lastName = 'Сидоров';
-alert(vasya.fullName); // Василий Сидоров
+alert( vasya.fullName ); // Василий Сидоров
```
diff --git a/1-js/6-objects-more/4-descriptors-getters-setters/1-replace-property-getter/task.md b/1-js/6-objects-more/4-descriptors-getters-setters/1-replace-property-getter/task.md
index 7f4950aa..f0e20971 100644
--- a/1-js/6-objects-more/4-descriptors-getters-setters/1-replace-property-getter/task.md
+++ b/1-js/6-objects-more/4-descriptors-getters-setters/1-replace-property-getter/task.md
@@ -20,13 +20,13 @@ var vasya = new User("Василий Попкин");
var vasya = new User("Василий Попкин");
// чтение firstName/lastName
-alert(vasya.firstName); // Василий
-alert(vasya.lastName); // Попкин
+alert( vasya.firstName ); // Василий
+alert( vasya.lastName ); // Попкин
// запись в lastName
vasya.lastName = 'Сидоров';
-alert(vasya.fullName); // Василий Сидоров
+alert( vasya.fullName ); // Василий Сидоров
```
Важно: не рекомендуется дублировать одни и те же данные в различных свойствах. Поэтому в этой задаче `fullName` должно остаться свойством, а `firstName/lastName` -- реализованы через `get/set`.
\ No newline at end of file
diff --git a/1-js/6-objects-more/4-descriptors-getters-setters/article.md b/1-js/6-objects-more/4-descriptors-getters-setters/article.md
index 5cd7c99f..eb052300 100644
--- a/1-js/6-objects-more/4-descriptors-getters-setters/article.md
+++ b/1-js/6-objects-more/4-descriptors-getters-setters/article.md
@@ -46,6 +46,7 @@ Object.defineProperty(obj, prop, descriptor)
Два таких вызова работают одинаково:
```js
+//+ no-beautify
var user = {};
// 1. простое присваивание
@@ -69,7 +70,7 @@ var user = {};
Object.defineProperty(user, "name", {
value: "Вася",
- writable: false, // запретить присвоение "user.name="
+ writable: false, // запретить присвоение "user.name="
configurable: false // запретить удаление "delete user.name"
});
@@ -90,7 +91,7 @@ user.name = "Петя";
К сожалению, свойство `toString`, объявленное обычным способом, будет видно в цикле `for..in`, например:
```js
-//+ run
+//+ run no-beautify
var user = {
name: "Вася",
toString: function() { return this.name; }
@@ -106,7 +107,7 @@ for(var key in user) alert(key); // name, toString
`Object.defineProperty` может исключить `toString` из списка итерации, поставив ему флаг `enumerable: false`. По стандарту, у встроенного `toString` этот флаг уже стоит.
```js
-//+ run
+//+ run no-beautify
var user = {
name: "Вася",
toString: function() { return this.name; }
@@ -169,18 +170,18 @@ Object.defineProperty(user, "fullName", {
*!*
set: function(value) {
- var split = value.split(' ');
- this.firstName = split[0];
- this.surname = split[1];
- }
+ var split = value.split(' ');
+ this.firstName = split[0];
+ this.surname = split[1];
+ }
*/!*
});
*!*
user.fullName = "Петя Иванов";
*/!*
-alert(user.firstName); // Петя
-alert(user.surname); // Иванов
+alert( user.firstName ); // Петя
+alert( user.surname ); // Иванов
```
## Указание get/set в литералах
@@ -213,11 +214,11 @@ var user = {
};
*!*
-alert(user.fullName); // Вася Петров (из геттера)
+alert( user.fullName ); // Вася Петров (из геттера)
user.fullName = "Петя Иванов";
-alert(user.firstName); // Петя (поставил сеттер)
-alert(user.surname); // Иванов (поставил сеттер)
+alert( user.firstName ); // Петя (поставил сеттер)
+alert( user.surname ); // Иванов (поставил сеттер)
*/!*
```
@@ -237,7 +238,7 @@ function User(name, age) {
var pete = new User("Петя", 25);
-alert(pete.age); // 25
+alert( pete.age ); // 25
```
С обычными свойствами в коде меньше букв, они удобны, причины использовать функции пока нет.
@@ -268,8 +269,8 @@ function User(name, birthday) {
this.birthday = birthday;
*!*
- Object.defineProperty(this, "age", {
- get: function() {
+ Object.defineProperty(this, "age", {
+ get: function() {
var todayYear = new Date().getFullYear();
return todayYear - this.birthday.getFullYear();
}
@@ -279,7 +280,7 @@ function User(name, birthday) {
var pete = new User("Петя", new Date(1987, 6, 1));
-alert(pete.age); // получает возраст из даты рождения
+alert( pete.age ); // получает возраст из даты рождения
```
Таким образом, `defineProperty` позволяет нам использовать обычные свойства и, при необходимости, в любой момент заменить их на функции, сохраняя полную совместимость.
@@ -335,7 +336,9 @@ var obj = {
internal: 3
};
-Object.defineProperty(obj, "internal", {enumerable: false});
+Object.defineProperty(obj, "internal", {
+ enumerable: false
+});
*!*
alert( Object.keys(obj) ); // a,b
@@ -351,7 +354,9 @@ alert( Object.getOwnPropertyNames(obj) ); // a, internal, b
```js
//+ run
-var obj = { test: 5 };
+var obj = {
+ test: 5
+};
*!*
var descriptor = Object.getOwnPropertyDescriptor(obj, 'test');
*/!*
@@ -362,7 +367,7 @@ var descriptor = Object.getOwnPropertyDescriptor(obj, 'test');
delete descriptor.value; // ..нужно убрать value/writable
delete descriptor.writable;
descriptor.get = function() { // и поставить get
- alert("Preved :)");
+ alert( "Preved :)" );
};
*!*
@@ -370,7 +375,7 @@ descriptor.get = function() { // и поставить get
*/!*
// если не удалить - defineProperty объединит старый дескриптор с новым
-delete obj.test;
+delete obj.test;
Object.defineProperty(obj, 'test', descriptor);
diff --git a/1-js/6-objects-more/5-static-properties-and-methods/1-objects-counter/solution.md b/1-js/6-objects-more/5-static-properties-and-methods/1-objects-counter/solution.md
index ad088c0b..45ce7d39 100644
--- a/1-js/6-objects-more/5-static-properties-and-methods/1-objects-counter/solution.md
+++ b/1-js/6-objects-more/5-static-properties-and-methods/1-objects-counter/solution.md
@@ -2,7 +2,7 @@
```js
//+ run
-function Article() {
+function Article() {
this.created = new Date;
*!*
@@ -14,7 +14,7 @@ Article.count = 0; // начальное значение
// (нельзя оставить undefined, т.к. Article.count++ будет NaN)
Article.showStats = function() {
- alert('Всего: ' + this.count + ', Последняя: ' + this.last);
+ alert( 'Всего: ' + this.count + ', Последняя: ' + this.last );
};
new Article();
diff --git a/1-js/6-objects-more/5-static-properties-and-methods/article.md b/1-js/6-objects-more/5-static-properties-and-methods/article.md
index 2ee1e348..3595a734 100644
--- a/1-js/6-objects-more/5-static-properties-and-methods/article.md
+++ b/1-js/6-objects-more/5-static-properties-and-methods/article.md
@@ -38,7 +38,7 @@ Article.count = 0;
Article.showCount = function() {
*!*
- alert(this.count); // (1)
+ alert( this.count ); // (1)
*/!*
}
@@ -82,10 +82,10 @@ function Journal(date) {
this.date = date;
this.formatDate = function(date) {
- return date.getDate() + '.' + (date.getMonth()+1) + '.' + date.getFullYear();
+ return date.getDate() + '.' + (date.getMonth() + 1) + '.' + date.getFullYear();
};
- this.getTitle = function() {
+ this.getTitle = function() {
return "Выпуск от " + this.formatDate(this.date);
};
@@ -99,17 +99,17 @@ Journal.compare = function(journalA, journalB) {
// использование:
var journals = [
- new Journal(new Date(2012,1,1)),
- new Journal(new Date(2012,0,1)),
- new Journal(new Date(2011,11,1))
+ new Journal(new Date(2012, 1, 1)),
+ new Journal(new Date(2012, 0, 1)),
+ new Journal(new Date(2011, 11, 1))
];
function findMin(journals) {
var min = 0;
- for(var i=0; i 0 ) min = i;
+ if (Journal.compare(journals[min], journals[i]) > 0) min = i;
*/!*
}
return journals[min];
@@ -154,7 +154,7 @@ alert( *!*Journal.formatDate(new Date)*/!* );
```js
//+ run
var str = String.fromCharCode(65);
-alert(str); // 'A'
+alert( str ); // 'A'
```
Но строки -- слишком простой пример, посмотрим что-нибудь посложнее.
@@ -165,15 +165,17 @@ alert(str); // 'A'
```js
//+ run
-function User(userData) {
+function User(userData) {
if (userData) { // если указаны данные -- одна ветка if
this.name = userData.name;
this.age = userData.age;
- } else { // если не указаны -- другая
+ } else { // если не указаны -- другая
this.name = 'Аноним';
}
- this.sayHi = function() { alert(this.name) };
+ this.sayHi = function() {
+ alert(this.name)
+ };
// ...
}
@@ -182,7 +184,10 @@ function User(userData) {
var guest = new User();
guest.sayHi(); // Аноним
-var knownUser = new User({name: 'Вася', age: 25});
+var knownUser = new User({
+ name: 'Вася',
+ age: 25
+});
knownUser.sayHi(); // Вася
```
@@ -192,8 +197,10 @@ knownUser.sayHi(); // Вася
```js
//+ run
-function User() {
- this.sayHi = function() { alert(this.name) };
+function User() {
+ this.sayHi = function() {
+ alert(this.name)
+ };
}
User.createAnonymous = function() {
@@ -215,7 +222,10 @@ User.createFromData = function(userData) {
var guest = User.createAnonymous();
guest.sayHi(); // Аноним
-var knownUser = User.createFromData({name: 'Вася', age: 25});
+var knownUser = User.createFromData({
+ name: 'Вася',
+ age: 25
+});
knownUser.sayHi(); // Вася
*/!*
```
diff --git a/1-js/6-objects-more/6-call-apply/1-rewrite-sum-arguments/solution.md b/1-js/6-objects-more/6-call-apply/1-rewrite-sum-arguments/solution.md
index ba57d3fa..9e5ca007 100644
--- a/1-js/6-objects-more/6-call-apply/1-rewrite-sum-arguments/solution.md
+++ b/1-js/6-objects-more/6-call-apply/1-rewrite-sum-arguments/solution.md
@@ -5,12 +5,12 @@
function sumArgs() {
// скопируем reduce из массива
arguments.reduce = [].reduce;
- return arguments.reduce(function(a, b) {
+ return arguments.reduce(function(a, b) {
return a + b;
});
}
-alert( sumArgs(4,5,6) ); // 15
+alert( sumArgs(4, 5, 6) ); // 15
```
# Второй вариант
@@ -21,11 +21,11 @@ alert( sumArgs(4,5,6) ); // 15
//+ run
function sumArgs() {
// запустим reduce из массива напрямую
- return [].reduce.call(arguments, function(a, b) {
- return a + b;
+ return [].reduce.call(arguments, function(a, b) {
+ return a + b;
});
}
-alert( sumArgs(4,5,6) ); // 15
+alert( sumArgs(4, 5, 6) ); // 15
```
diff --git a/1-js/6-objects-more/6-call-apply/1-rewrite-sum-arguments/task.md b/1-js/6-objects-more/6-call-apply/1-rewrite-sum-arguments/task.md
index 412f68c9..b03a9fc7 100644
--- a/1-js/6-objects-more/6-call-apply/1-rewrite-sum-arguments/task.md
+++ b/1-js/6-objects-more/6-call-apply/1-rewrite-sum-arguments/task.md
@@ -7,10 +7,12 @@
```js
//+ run
function sum(arr) {
- return arr.reduce(function(a, b) { return a + b; });
+ return arr.reduce(function(a, b) {
+ return a + b;
+ });
}
-alert( sum([1,2,3]) ); // 6 (=1+2+3)
+alert( sum([1, 2, 3]) ); // 6 (=1+2+3)
```
Создайте аналогичную функцию `sumArgs()`, которая будет суммировать все свои аргументы:
@@ -20,7 +22,7 @@ function sumArgs() {
/* ваш код */
}
-alert( sumArgs(1,2,3) ); // 6, аргументы переданы через запятую, без массива
+alert( sumArgs(1, 2, 3) ); // 6, аргументы переданы через запятую, без массива
```
Для решения примените метод `reduce` к `arguments`, используя `call`, `apply` или одалживание метода.
diff --git a/1-js/6-objects-more/6-call-apply/2-apply-function-skip-first-argument/solution.md b/1-js/6-objects-more/6-call-apply/2-apply-function-skip-first-argument/solution.md
index 32d6e1c7..c8579b0a 100644
--- a/1-js/6-objects-more/6-call-apply/2-apply-function-skip-first-argument/solution.md
+++ b/1-js/6-objects-more/6-call-apply/2-apply-function-skip-first-argument/solution.md
@@ -3,16 +3,21 @@
```js
//+ run
function sum() {
- return [].reduce.call(arguments, function(a, b) { return a + b; });
+ return [].reduce.call(arguments, function(a, b) {
+ return a + b;
+ });
}
+
function mul() {
- return [].reduce.call(arguments, function(a, b) { return a * b; });
+ return [].reduce.call(arguments, function(a, b) {
+ return a * b;
+ });
}
*!*
function applyAll(func) {
- return func.apply(this, [].slice.call(arguments, 1) );
-}
+ return func.apply(this, [].slice.call(arguments, 1));
+ }
*/!*
alert( applyAll(sum, 1, 2, 3) ); // 6
diff --git a/1-js/6-objects-more/6-call-apply/2-apply-function-skip-first-argument/task.md b/1-js/6-objects-more/6-call-apply/2-apply-function-skip-first-argument/task.md
index d7f13e9a..95bd2413 100644
--- a/1-js/6-objects-more/6-call-apply/2-apply-function-skip-first-argument/task.md
+++ b/1-js/6-objects-more/6-call-apply/2-apply-function-skip-first-argument/task.md
@@ -21,10 +21,15 @@ alert( applyAll(Math.min, 2, -2, 3) ); // -2
```js
//+ run
function sum() { // суммирует аргументы: sum(1,2,3) = 6
- return [].reduce.call(arguments, function(a, b) { return a + b; });
+ return [].reduce.call(arguments, function(a, b) {
+ return a + b;
+ });
}
+
function mul() { // перемножает аргументы: mul(2,3,4) = 24
- return [].reduce.call(arguments, function(a, b) { return a * b; });
+ return [].reduce.call(arguments, function(a, b) {
+ return a * b;
+ });
}
*!*
diff --git a/1-js/6-objects-more/6-call-apply/article.md b/1-js/6-objects-more/6-call-apply/article.md
index 2af573cb..08f9f386 100644
--- a/1-js/6-objects-more/6-call-apply/article.md
+++ b/1-js/6-objects-more/6-call-apply/article.md
@@ -11,7 +11,7 @@
Синтаксис метода `call`:
```js
-func.call(context, arg1, arg2,...)
+func.call(context, arg1, arg2, ...)
```
При этом вызывается функция `func`, первый аргумент `call` становится её `this`, а остальные передаются "как есть".
@@ -21,7 +21,7 @@ func.call(context, arg1, arg2,...)
Например, у нас есть функция `showFullName`, которая работает с `this`:
```js
-function showFullName() {
+function showFullName() {
alert( this.firstName + " " + this.lastName );
}
```
@@ -32,18 +32,18 @@ function showFullName() {
```js
//+ run
-function showFullName() {
+function showFullName() {
alert( this.firstName + " " + this.lastName );
}
-var user = {
+var user = {
firstName: "Василий",
lastName: "Петров"
};
*!*
// функция вызовется с this=user
-showFullName.call(user) // "Василий Петров"
+showFullName.call(user) // "Василий Петров"
*/!*
```
@@ -51,20 +51,20 @@ showFullName.call(user) // "Василий Петров"
```js
//+ run
-var user = {
+var user = {
firstName: "Василий",
surname: "Петров",
patronym: "Иванович"
};
-function showFullName(firstPart, lastPart) {
+function showFullName(firstPart, lastPart) {
alert( this[firstPart] + " " + this[lastPart] );
}
*!*
// f.call(контекст, аргумент1, аргумент2, ...)
-showFullName.call(user, 'firstName', 'surname') // "Василий Петров"
-showFullName.call(user, 'firstName', 'patronym') // "Василий Иванович"
+showFullName.call(user, 'firstName', 'surname') // "Василий Петров"
+showFullName.call(user, 'firstName', 'patronym') // "Василий Иванович"
*/!*
```
@@ -85,9 +85,9 @@ showFullName.call(user, 'firstName', 'patronym') // "Василий Ивано
function printArgs() {
arguments.join = [].join; // одолжили метод (1)
- var argStr = arguments.join(':'); // (2)
+ var argStr = arguments.join(':'); // (2)
- alert(argStr); // сработает и выведет 1:2:3
+ alert( argStr ); // сработает и выведет 1:2:3
}
printArgs(1, 2, 3);
@@ -107,12 +107,12 @@ printArgs(1, 2, 3);
function join(separator) {
if (!this.length) return '';
- var str = this[0];
+ var str = this[0];
- for (var i = 1; i
```js
+//+ no-beautify
obj.func(...) // this = obj
obj["func"](...)
```
@@ -284,7 +285,7 @@ obj["func"](...)
```js
-func(...) // this = window (ES3) /undefined (ES5)
+func(...) // this = window (ES3) /undefined (ES5)
```
@@ -292,7 +293,7 @@ func(...) // this = window (ES3) /undefined (ES5)
```js
-new func() // this = {} (новый объект)
+new func() // this = {} (новый объект)
```
diff --git a/1-js/6-objects-more/7-bind/1-cross-browser-bind/task.md b/1-js/6-objects-more/7-bind/1-cross-browser-bind/task.md
index af2df791..ce481712 100644
--- a/1-js/6-objects-more/7-bind/1-cross-browser-bind/task.md
+++ b/1-js/6-objects-more/7-bind/1-cross-browser-bind/task.md
@@ -5,6 +5,7 @@
Если вы вдруг захотите копнуть поглубже -- аналог `bind` для IE8- и старых версий других браузеров будет выглядеть следующим образом:
```js
+//+ no-beautify
function bind(func, context /*, args*/) {
var bindArgs = [].slice.call(arguments, 2); // (1)
function wrapper() { // (2)
diff --git a/1-js/6-objects-more/7-bind/2-write-to-object-after-bind/solution.md b/1-js/6-objects-more/7-bind/2-write-to-object-after-bind/solution.md
index c34280b8..ccd6ca0c 100644
--- a/1-js/6-objects-more/7-bind/2-write-to-object-after-bind/solution.md
+++ b/1-js/6-objects-more/7-bind/2-write-to-object-after-bind/solution.md
@@ -9,7 +9,7 @@ function f() {
var user = {
g: f.bind("Hello")
}
-
+
user.g();
```
diff --git a/1-js/6-objects-more/7-bind/2-write-to-object-after-bind/task.md b/1-js/6-objects-more/7-bind/2-write-to-object-after-bind/task.md
index 75d6a697..a189eeb3 100644
--- a/1-js/6-objects-more/7-bind/2-write-to-object-after-bind/task.md
+++ b/1-js/6-objects-more/7-bind/2-write-to-object-after-bind/task.md
@@ -12,7 +12,7 @@ function f() {
var user = {
g: f.bind("Hello")
}
-
+
user.g();
```
diff --git a/1-js/6-objects-more/7-bind/3-second-bind/solution.md b/1-js/6-objects-more/7-bind/3-second-bind/solution.md
index 952a8df4..d55561a2 100644
--- a/1-js/6-objects-more/7-bind/3-second-bind/solution.md
+++ b/1-js/6-objects-more/7-bind/3-second-bind/solution.md
@@ -1,7 +1,7 @@
Ответ: `"Вася"`.
```js
-//+ run
+//+ run no-beautify
function f() {
alert(this.name);
}
@@ -19,8 +19,8 @@ f(); // Вася
```js
function bind(func, context) {
- return function() {
- return func.apply(context, arguments);
+ return function() {
+ return func.apply(context, arguments);
};
}
```
@@ -28,6 +28,7 @@ function bind(func, context) {
Код станет таким:
```js
+//+ no-beautify
function f() {
alert(this.name);
}
@@ -43,8 +44,8 @@ f(); // Вася
```js
function bind(func, context) {
*!*
- return function() {
- return func.apply(context, arguments);
+ return function() {
+ return func.apply(context, arguments);
};
*/!*
}
diff --git a/1-js/6-objects-more/7-bind/3-second-bind/task.md b/1-js/6-objects-more/7-bind/3-second-bind/task.md
index 5808b590..3b0f06b2 100644
--- a/1-js/6-objects-more/7-bind/3-second-bind/task.md
+++ b/1-js/6-objects-more/7-bind/3-second-bind/task.md
@@ -5,6 +5,7 @@
Что выведет этот код?
```js
+//+ no-beautify
function f() {
alert(this.name);
}
diff --git a/1-js/6-objects-more/7-bind/4-function-property-after-bind/task.md b/1-js/6-objects-more/7-bind/4-function-property-after-bind/task.md
index 2ab42fc4..b182b4e5 100644
--- a/1-js/6-objects-more/7-bind/4-function-property-after-bind/task.md
+++ b/1-js/6-objects-more/7-bind/4-function-property-after-bind/task.md
@@ -5,16 +5,18 @@
В свойство функции записано значение. Изменится ли оно после применения `bind`? Обоснуйте ответ.
```js
-function sayHi() {
- alert(this.name);
+function sayHi() {
+ alert( this.name );
}
sayHi.test = 5;
-alert(sayHi.test); // 5
+alert( sayHi.test ); // 5
*!*
-var bound = sayHi.bind({ name: "Вася" });
+var bound = sayHi.bind({
+ name: "Вася"
+});
-alert(bound.test); // что выведет? почему?
+alert( bound.test ); // что выведет? почему?
*/!*
```
diff --git a/1-js/6-objects-more/7-bind/5-question-use-bind/solution.md b/1-js/6-objects-more/7-bind/5-question-use-bind/solution.md
index d022a510..7eb5963e 100644
--- a/1-js/6-objects-more/7-bind/5-question-use-bind/solution.md
+++ b/1-js/6-objects-more/7-bind/5-question-use-bind/solution.md
@@ -19,11 +19,11 @@ var user = {
password: '12345',
loginOk: function() {
- alert(this.login + ' вошёл в сайт');
+ alert( this.login + ' вошёл в сайт' );
},
loginFail: function() {
- alert(this.login + ': ошибка входа');
+ alert( this.login + ': ошибка входа' );
},
checkPassword: function() {
@@ -43,6 +43,7 @@ vasya.checkPassword();
Альтернативное решение -- сделать функции-обёртки над `user.loginOk/loginFail`:
```js
+//+ no-beautify
var user = {
...
checkPassword: function() {
@@ -79,19 +80,23 @@ var user = {
password: '12345',
loginOk: function() {
- alert(this.login + ' вошёл в сайт');
+ alert( this.login + ' вошёл в сайт' );
},
loginFail: function() {
- alert(this.login + ': ошибка входа');
+ alert( this.login + ': ошибка входа' );
},
checkPassword: function() {
*!*
var self = this;
- ask("Ваш пароль?", this.password,
- function() { self.loginOk(); },
- function() { self.loginFail(); }
+ ask("Ваш пароль?", this.password,
+ function() {
+ self.loginOk();
+ },
+ function() {
+ self.loginFail();
+ }
);
*/!*
}
diff --git a/1-js/6-objects-more/7-bind/5-question-use-bind/task.md b/1-js/6-objects-more/7-bind/5-question-use-bind/task.md
index be46ffc1..a36bb858 100644
--- a/1-js/6-objects-more/7-bind/5-question-use-bind/task.md
+++ b/1-js/6-objects-more/7-bind/5-question-use-bind/task.md
@@ -23,11 +23,11 @@ var user = {
password: '12345',
loginOk: function() {
- alert(this.login + ' вошёл в сайт');
+ alert( this.login + ' вошёл в сайт' );
},
loginFail: function() {
- alert(this.login + ': ошибка входа');
+ alert( this.login + ': ошибка входа' );
},
checkPassword: function() {
diff --git a/1-js/6-objects-more/7-bind/6-ask-currying/solution.md b/1-js/6-objects-more/7-bind/6-ask-currying/solution.md
index 3a1173f0..86877551 100644
--- a/1-js/6-objects-more/7-bind/6-ask-currying/solution.md
+++ b/1-js/6-objects-more/7-bind/6-ask-currying/solution.md
@@ -17,7 +17,7 @@ var user = {
password: '12345',
loginDone: function(result) {
- alert(this.login + (result ? ' вошёл в сайт' : ' ошибка входа'));
+ alert( this.login + (result ? ' вошёл в сайт' : ' ошибка входа') );
},
checkPassword: function() {
@@ -49,15 +49,19 @@ var user = {
password: '12345',
loginDone: function(result) {
- alert(this.login + (result ? ' вошёл в сайт' : ' ошибка входа'));
+ alert( this.login + (result ? ' вошёл в сайт' : ' ошибка входа') );
},
checkPassword: function() {
var self = this;
*!*
ask("Ваш пароль?", this.password,
- function() { self.loginDone(true); },
- function() { self.loginDone(false); }
+ function() {
+ self.loginDone(true);
+ },
+ function() {
+ self.loginDone(false);
+ }
);
*/!*
}
diff --git a/1-js/6-objects-more/7-bind/6-ask-currying/task.md b/1-js/6-objects-more/7-bind/6-ask-currying/task.md
index 245d91d8..152c9b9a 100644
--- a/1-js/6-objects-more/7-bind/6-ask-currying/task.md
+++ b/1-js/6-objects-more/7-bind/6-ask-currying/task.md
@@ -30,14 +30,18 @@ var user = {
// метод для вызова из ask
loginDone: function(result) {
- alert(this.login + (result ? ' вошёл в сайт' : ' ошибка входа'));
+ alert( this.login + (result ? ' вошёл в сайт' : ' ошибка входа') );
},
checkPassword: function() {
*!*
- ask("Ваш пароль?", this.password,
- function() { user.loginDone(true); },
- function() { user.loginDone(false); }
+ ask("Ваш пароль?", this.password,
+ function() {
+ user.loginDone(true);
+ },
+ function() {
+ user.loginDone(false);
+ }
);
*/!*
}
diff --git a/1-js/6-objects-more/7-bind/article.md b/1-js/6-objects-more/7-bind/article.md
index afe17701..844d5c8d 100644
--- a/1-js/6-objects-more/7-bind/article.md
+++ b/1-js/6-objects-more/7-bind/article.md
@@ -19,7 +19,7 @@
```js
//+ run
setTimeout(function() {
- alert("Привет");
+ alert( "Привет" );
}, 1000);
```
@@ -29,13 +29,13 @@ setTimeout(function() {
//+ run
var user = {
firstName: "Вася",
- sayHi: function() {
- alert(this.firstName);
+ sayHi: function() {
+ alert( this.firstName );
}
};
*!*
-setTimeout( user.sayHi, 1000); // undefined (не Вася!)
+setTimeout(user.sayHi, 1000); // undefined (не Вася!)
*/!*
```
@@ -61,15 +61,15 @@ setTimeout(f, 1000); // контекст user потеряли
//+ run
var user = {
firstName: "Вася",
- sayHi: function() {
- alert(this.firstName);
+ sayHi: function() {
+ alert( this.firstName );
}
};
*!*
setTimeout(function() {
- user.sayHi(); // Вася
-}, 1000);
+ user.sayHi(); // Вася
+}, 1000);
*/!*
```
@@ -82,15 +82,15 @@ setTimeout(function() {
//+ run
var user = {
firstName: "Вася",
- sayHi: function(who) {
- alert(this.firstName + ": Привет, " + who);
+ sayHi: function(who) {
+ alert( this.firstName + ": Привет, " + who );
}
};
*!*
setTimeout(function() {
- user.sayHi("Петя"); // Вася: Привет, Петя
-}, 1000);
+ user.sayHi("Петя"); // Вася: Привет, Петя
+}, 1000);
*/!*
```
@@ -108,7 +108,7 @@ setTimeout(function() {
```js
function bind(func, context) {
return function() { // (*)
- return func.apply(context, arguments);
+ return func.apply(context, arguments);
};
}
```
@@ -117,10 +117,12 @@ function bind(func, context) {
```js
//+ run
-function f() { alert(this); }
+function f() {
+ alert( this );
+}
var g = bind(f, "Context");
-g(); // Context
+g(); // Context
```
То есть, `bind(f, "Context")` привязывает `"Context"` в качестве `this` для `f`.
@@ -132,16 +134,16 @@ g(); // Context
Вот она отдельно:
```js
-function() { // (*)
- return func.apply(context, arguments);
+function() { // (*)
+ return func.apply(context, arguments);
};
```
Если подставить наши конкретные аргументы, то есть `f` и `"Context"`, то получится так:
```js
-function() { // (*)
- return f.apply("Context", arguments);
+function() { // (*)
+ return f.apply("Context", arguments);
};
```
@@ -153,13 +155,13 @@ function() { // (*)
```js
//+ run
-function f(a, b) {
- alert(this);
- alert(a + b);
+function f(a, b) {
+ alert( this );
+ alert( a + b );
}
var g = bind(f, "Context");
-g(1, 2); // Context, затем 3
+g(1, 2); // Context, затем 3
```
Аргументы, которые получила `g(...)`, передаются в `f` также благодаря методу `.apply`.
@@ -171,20 +173,20 @@ g(1, 2); // Context, затем 3
```js
//+ run
function bind(func, context) {
- return function() {
- return func.apply(context, arguments);
+ return function() {
+ return func.apply(context, arguments);
};
}
var user = {
firstName: "Вася",
sayHi: function() {
- alert(this.firstName);
+ alert( this.firstName );
}
};
*!*
-setTimeout( bind(user.sayHi, user), 1000 );
+setTimeout(bind(user.sayHi, user), 1000);
*/!*
```
@@ -201,7 +203,7 @@ var user = {
*!*
sayHi: function(who) { // здесь у sayHi есть один аргумент
*/!*
- alert(this.firstName + ": Привет, " + who);
+ alert( this.firstName + ": Привет, " + who );
}
};
@@ -228,9 +230,9 @@ sayHi("Маша"); // Вася: Привет, Маша
```js
//+ run
-function f(a, b) {
- alert(this);
- alert(a + b);
+function f(a, b) {
+ alert( this );
+ alert( a + b );
}
*!*
@@ -238,7 +240,7 @@ function f(a, b) {
// var g = bind(f, "Context");
var g = f.bind("Context");
*/!*
-g(1, 2); // Context, затем 3
+g(1, 2); // Context, затем 3
```
Синтаксис встроенного `bind`:
@@ -264,14 +266,14 @@ var wrapper = func.bind(context[, arg1, arg2...])
//+ run
var user = {
firstName: "Вася",
- sayHi: function() {
- alert(this.firstName);
+ sayHi: function() {
+ alert( this.firstName );
}
};
*!*
// setTimeout( bind(user.sayHi, user), 1000 );
-setTimeout( user.sayHi.bind(user), 1000 ); // аналог через встроенный метод
+setTimeout(user.sayHi.bind(user), 1000); // аналог через встроенный метод
*/!*
```
@@ -291,7 +293,7 @@ setTimeout( user.sayHi.bind(user), 1000 ); // аналог через встро
Если у объекта много методов и мы планируем их активно передавать, то можно привязать контекст для них всех в цикле:
```js
-for(var prop in user) {
+for (var prop in user) {
if (typeof user[prop] == 'function') {
user[prop] = user[prop].bind(user);
}
@@ -327,9 +329,9 @@ function mul(a, b) {
var double = mul.bind(null, 2); // контекст фиксируем null, он не используется
*/!*
-alert( double(3) ); // = mul(2, 3) = 6
-alert( double(4) ); // = mul(2, 4) = 8
-alert( double(5) ); // = mul(2, 5) = 10
+alert( double(3) ); // = mul(2, 3) = 6
+alert( double(4) ); // = mul(2, 4) = 8
+alert( double(5) ); // = mul(2, 5) = 10
```
При вызове `double` будет передавать свои аргументы исходной функции `mul` после тех, которые указаны в `bind`, то есть в данном случае после зафиксированного первого аргумента `2`.
@@ -344,9 +346,9 @@ alert( double(5) ); // = mul(2, 5) = 10
var triple = mul.bind(null, 3); // контекст фиксируем null, он не используется
*/!*
-alert( triple(3) ); // = mul(3, 3) = 9
-alert( triple(4) ); // = mul(3, 4) = 12
-alert( triple(5) ); // = mul(3, 5) = 15
+alert( triple(3) ); // = mul(3, 3) = 9
+alert( triple(4) ); // = mul(3, 4) = 12
+alert( triple(5) ); // = mul(3, 5) = 15
```
При помощи `bind` мы можем получить из функции её "частный вариант" как самостоятельную функцию и дальше передать в `setTimeout` или сделать с ней что-то ещё.
@@ -377,12 +379,12 @@ function ask(question, answer, ok, fail) {
ask("Выпустить птичку?", "да", fly, die);
*/!*
-function fly() {
- alert('улетела :)');
+function fly() {
+ alert( 'улетела :)' );
}
-function die() {
- alert('птичку жалко :(');
+function die() {
+ alert( 'птичку жалко :(' );
}
```
@@ -400,7 +402,7 @@ setTimeout(function() {
...Либо использовать `bind`:
```js
-setTimeout( obj.func.bind(obj) );
+setTimeout(obj.func.bind(obj));
```
Вызов `bind` часто используют для привязки функции к контексту, чтобы затем присвоить её в обычную переменную и вызывать уже без явного указания объекта.
diff --git a/1-js/6-objects-more/8-decorators/1-logging-decorator/solution.md b/1-js/6-objects-more/8-decorators/1-logging-decorator/solution.md
index ac92d137..103ff4e5 100644
--- a/1-js/6-objects-more/8-decorators/1-logging-decorator/solution.md
+++ b/1-js/6-objects-more/8-decorators/1-logging-decorator/solution.md
@@ -2,7 +2,7 @@
```js
//+ run
-function work(a) {
+function work(a) {
/*...*/ // work - произвольная функция, один аргумент
}
@@ -10,9 +10,9 @@ function makeLogging(f, log) {
*!*
function wrapper(a) {
- log.push(a);
- return f.call(this, a);
- }
+ log.push(a);
+ return f.call(this, a);
+ }
*/!*
return wrapper;
@@ -24,7 +24,7 @@ work = makeLogging(work, log);
work(1); // 1
work(5); // 5
-for(var i=0; i 2) ? fibonacci(n-1) + fibonacci(n-2) : 1;
+ return (n > 2) ? fibonacci(n - 1) + fibonacci(n - 2) : 1;
}
*!*
@@ -86,7 +86,7 @@ alert( fibonacci(20) ); // 6765
*!*
// в любой момент можно получить общее количество времени на вызовы
-alert( timers.fibo + 'мс' );
+alert( timers.fibo + 'мс' );
*/!*
```
@@ -105,6 +105,7 @@ var result = f.apply(this, arguments); // (*)
Например:
```js
+//+ no-beautify
function sum(a, b) {
return a + b;
}
@@ -134,9 +135,9 @@ function checkNumber(value) {
// второй аргумент checks - массив с функциями для проверки
function typeCheck(f, checks) {
return function() {
- for(var i=0; i
diff --git a/1-js/7-js-misc/2-json/article.md b/1-js/7-js-misc/2-json/article.md
index d52a8f1e..ff9b48cc 100644
--- a/1-js/7-js-misc/2-json/article.md
+++ b/1-js/7-js-misc/2-json/article.md
@@ -183,8 +183,8 @@ event = JSON.parse(str);
//+ run
var room = {
number: 23,
- occupy: function() {
- alert(this.number);
+ occupy: function() {
+ alert( this.number );
}
};
@@ -216,9 +216,9 @@ alert( JSON.stringify(event) );
var room = {
number: 23,
*!*
- toJSON: function() {
- return this.number;
- }
+ toJSON: function() {
+ return this.number;
+ }
*/!*
};
@@ -239,7 +239,7 @@ alert( JSON.stringify(room) ); // 23
var user = {
name: "Вася",
age: 25,
- window: window
+ window: window
};
*!*
@@ -259,11 +259,11 @@ alert( JSON.stringify(user) ); // ошибка!
var user = {
name: "Вася",
age: 25,
- window: window
+ window: window
};
*!*
-alert( JSON.stringify(user, ["name", "age"]) );
+alert( JSON.stringify(user, ["name", "age"]) );
// {"name":"Вася","age":25}
*/!*
```
@@ -275,17 +275,17 @@ alert( JSON.stringify(user, ["name", "age"]) );
var user = {
name: "Вася",
age: 25,
- window: window
+ window: window
};
*!*
var str = JSON.stringify(user, function(key, value) {
if (key == 'window') return undefined;
return value;
-} );
+});
*/!*
-alert(str); // {"name":"Вася","age":25}
+alert( str ); // {"name":"Вася","age":25}
```
В примере выше функция пропустит свойство с названием `window`. Для остальных она просто возвращает значение, передавая его стандартному алгоритму. А могла бы и как-то обработать.
@@ -307,14 +307,17 @@ alert(str); // {"name":"Вася","age":25}
var user = {
name: "Вася",
age: 25,
- roles: {isAdmin: false, isEditor: true}
+ roles: {
+ isAdmin: false,
+ isEditor: true
+ }
};
*!*
var str = JSON.stringify(user, "", 4);
*/!*
-alert(str);
+alert( str );
/* Результат -- красиво сериализованный объект:
{
"name": "Вася",
diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/4-settimeout-result/task.md b/1-js/7-js-misc/3-setTimeout-setInterval/4-settimeout-result/task.md
index cc6bf22e..11d0d836 100644
--- a/1-js/7-js-misc/3-setTimeout-setInterval/4-settimeout-result/task.md
+++ b/1-js/7-js-misc/3-setTimeout-setInterval/4-settimeout-result/task.md
@@ -15,15 +15,15 @@
Что выведет `alert` в коде ниже?
```js
-setTimeout(function() {
- alert(i);
+setTimeout(function() {
+ alert( i );
}, 100);
var i;
-function hardWork() {
+function hardWork() {
// время выполнения этого кода >100мс, сам код неважен
- for(i=0; i<1e8; i++) hardWork[i%2] = i;
+ for (i = 0; i < 1e8; i++) hardWork[i % 2] = i;
}
hardWork();
diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/5-setinterval-result/solution.md b/1-js/7-js-misc/3-setTimeout-setInterval/5-setinterval-result/solution.md
index d45ba64f..1fe34f89 100644
--- a/1-js/7-js-misc/3-setTimeout-setInterval/5-setinterval-result/solution.md
+++ b/1-js/7-js-misc/3-setTimeout-setInterval/5-setinterval-result/solution.md
@@ -4,23 +4,23 @@
```js
//+ run
-var timer = setInterval(function() {
+var timer = setInterval(function() {
i++;
}, 10);
-setTimeout(function() {
+setTimeout(function() {
clearInterval(timer);
*!*
- alert(i); // (*)
+ alert( i ); // (*)
*/!*
}, 50);
var i;
-function f() {
+function f() {
// точное время выполнения не играет роли
// здесь оно заведомо больше 100мс
- for(i=0; i<1e8; i++) f[i%2] = i;
+ for (i = 0; i < 1e8; i++) f[i % 2] = i;
}
f();
diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/5-setinterval-result/task.md b/1-js/7-js-misc/3-setTimeout-setInterval/5-setinterval-result/task.md
index 504dde53..84461c2d 100644
--- a/1-js/7-js-misc/3-setTimeout-setInterval/5-setinterval-result/task.md
+++ b/1-js/7-js-misc/3-setTimeout-setInterval/5-setinterval-result/task.md
@@ -28,15 +28,15 @@ var timer = setInterval(function() { // планируем setInterval кажд
setTimeout(function() { // через 50мс - отмена setInterval
clearInterval(timer);
*!*
- alert(i); // (*)
+ alert( i ); // (*)
*/!*
}, 50);
// и запускаем тяжёлую функцию
-function f() {
+function f() {
// точное время выполнения не играет роли
// здесь оно заведомо больше 100мс
- for(i=0; i<1e8; i++) f[i%2] = i;
+ for (i = 0; i < 1e8; i++) f[i % 2] = i;
}
f();
diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/6-who-runs-faster/solution.md b/1-js/7-js-misc/3-setTimeout-setInterval/6-who-runs-faster/solution.md
index 7fe4a8fe..9d8afe0d 100644
--- a/1-js/7-js-misc/3-setTimeout-setInterval/6-who-runs-faster/solution.md
+++ b/1-js/7-js-misc/3-setTimeout-setInterval/6-who-runs-faster/solution.md
@@ -12,16 +12,16 @@ function Runner() {
this.steps = 0;
this.step = function() {
- this.doSomethingHeavy();
+ this.doSomethingHeavy();
this.steps++;
};
function fib(n) {
- return n <= 1 ? n : fib(n-1) + fib(n-2);
+ return n <= 1 ? n : fib(n - 1) + fib(n - 2);
}
this.doSomethingHeavy = function() {
- for(var i=0; i<25; i++) {
+ for (var i = 0; i < 25; i++) {
this[i] = fib(i);
}
};
@@ -45,8 +45,8 @@ var t2 = setTimeout(function go() {
setTimeout(function() {
clearInterval(t1);
clearTimeout(t2);
- alert(runner1.steps);
- alert(runner2.steps);
+ alert( runner1.steps );
+ alert( runner2.steps );
}, 5000);
```
diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/6-who-runs-faster/task.md b/1-js/7-js-misc/3-setTimeout-setInterval/6-who-runs-faster/task.md
index f65075d8..85d20a37 100644
--- a/1-js/7-js-misc/3-setTimeout-setInterval/6-who-runs-faster/task.md
+++ b/1-js/7-js-misc/3-setTimeout-setInterval/6-who-runs-faster/task.md
@@ -28,8 +28,8 @@ setTimeout(function go() {
}, 15);
setTimeout(function() {
- alert(runner1.steps);
- alert(runner2.steps);
+ alert( runner1.steps );
+ alert( runner2.steps );
}, 5000);
```
diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/7-delay/solution.md b/1-js/7-js-misc/3-setTimeout-setInterval/7-delay/solution.md
index d578ae3b..2044ff9b 100644
--- a/1-js/7-js-misc/3-setTimeout-setInterval/7-delay/solution.md
+++ b/1-js/7-js-misc/3-setTimeout-setInterval/7-delay/solution.md
@@ -18,7 +18,7 @@ function delay(f, ms) {
}
function f(x) {
- alert(x);
+ alert( x );
}
var f1000 = delay(f, 1000);
@@ -36,7 +36,7 @@ return function() {
var savedArgs = arguments;
setTimeout(function() {
- f.apply(savedThis , savedArgs);
+ f.apply(savedThis, savedArgs);
}, ms);
};
```
diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/7-delay/task.md b/1-js/7-js-misc/3-setTimeout-setInterval/7-delay/task.md
index f65ddb06..965802ae 100644
--- a/1-js/7-js-misc/3-setTimeout-setInterval/7-delay/task.md
+++ b/1-js/7-js-misc/3-setTimeout-setInterval/7-delay/task.md
@@ -8,7 +8,7 @@
```js
function f(x) {
- alert(x);
+ alert( x );
}
var f1000 = delay(f, 1000);
diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/8-debounce/solution.md b/1-js/7-js-misc/3-setTimeout-setInterval/8-debounce/solution.md
index 6c8ea156..d5fc55e1 100644
--- a/1-js/7-js-misc/3-setTimeout-setInterval/8-debounce/solution.md
+++ b/1-js/7-js-misc/3-setTimeout-setInterval/8-debounce/solution.md
@@ -1,7 +1,7 @@
```js
-//+ run
+//+ run no-beautify
function debounce(f, ms) {
var state = null;
diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/8-debounce/task.md b/1-js/7-js-misc/3-setTimeout-setInterval/8-debounce/task.md
index 343ccecf..37d11c8b 100644
--- a/1-js/7-js-misc/3-setTimeout-setInterval/8-debounce/task.md
+++ b/1-js/7-js-misc/3-setTimeout-setInterval/8-debounce/task.md
@@ -9,6 +9,7 @@
Например:
```js
+//+ no-beautify
function f() { ... }
var f = debounce(f, 1000);
diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/9-throttle/solution.md b/1-js/7-js-misc/3-setTimeout-setInterval/9-throttle/solution.md
index 6c078926..306f2977 100644
--- a/1-js/7-js-misc/3-setTimeout-setInterval/9-throttle/solution.md
+++ b/1-js/7-js-misc/3-setTimeout-setInterval/9-throttle/solution.md
@@ -2,32 +2,32 @@
```js
function throttle(func, ms) {
-
+
var isThrottled = false,
savedArgs,
savedThis;
-
+
function wrapper() {
-
+
if (isThrottled) { // (2)
savedArgs = arguments;
savedThis = this;
return;
}
-
- func.apply(this, arguments); // (1)
-
+
+ func.apply(this, arguments); // (1)
+
isThrottled = true;
-
+
setTimeout(function() {
isThrottled = false; // (3)
if (savedArgs) {
wrapper.apply(savedThis, savedArgs);
savedArgs = savedThis = null;
}
- }, ms);
+ }, ms);
}
-
+
return wrapper;
}
```
diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/9-throttle/task.md b/1-js/7-js-misc/3-setTimeout-setInterval/9-throttle/task.md
index 6c762461..367cd92c 100644
--- a/1-js/7-js-misc/3-setTimeout-setInterval/9-throttle/task.md
+++ b/1-js/7-js-misc/3-setTimeout-setInterval/9-throttle/task.md
@@ -35,7 +35,9 @@
Пример использования:
```js
-var f = function(a) { console.log(a) };
+var f = function(a) {
+ console.log(a)
+};
// затормозить функцию до одного раза в 1000 мс
var f1000 = throttle(f, 1000);
diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/article.md b/1-js/7-js-misc/3-setTimeout-setInterval/article.md
index e649ed48..64c3412a 100644
--- a/1-js/7-js-misc/3-setTimeout-setInterval/article.md
+++ b/1-js/7-js-misc/3-setTimeout-setInterval/article.md
@@ -10,7 +10,7 @@
Синтаксис:
```js
-var timerId = setTimeout(func/code, delay[, arg1, arg2...])
+var timerId = setTimeout(func / code, delay[, arg1, arg2...])
```
Параметры:
@@ -31,8 +31,8 @@ var timerId = setTimeout(func/code, delay[, arg1, arg2...])
```js
//+ run
-function func() {
- alert('Привет');
+function func() {
+ alert( 'Привет' );
}
*!*
@@ -44,12 +44,12 @@ setTimeout(func, 1000);
```js
//+ run
-function func(phrase, who) {
- alert(phrase + ', ' + who);
+function func(phrase, who) {
+ alert( phrase + ', ' + who );
}
*!*
-setTimeout(func, 1000, "Привет", "Вася"); // Привет, Вася
+setTimeout(func, 1000, "Привет", "Вася"); // Привет, Вася
*/!*
```
@@ -58,7 +58,7 @@ setTimeout(func, 1000, "Привет", "Вася"); // Привет, Вася
То есть такая запись тоже сработает:
```js
-//+ run
+//+ run no-beautify
setTimeout("alert('Привет')", 1000);
```
@@ -67,7 +67,7 @@ setTimeout("alert('Привет')", 1000);
Вместо них используйте анонимные функции, вот так:
```js
-//+ run
+//+ run no-beautify
setTimeout(function() { alert('Привет') }, 1000);
```
@@ -85,7 +85,7 @@ clearTimeout(timerId);
В следующем примере мы ставим таймаут, а затем удаляем (передумали). В результате ничего не происходит.
```js
-//+ run
+//+ run no-beautify
var timerId = setTimeout(function() { alert(1) }, 1000);
alert(timerId); // число - идентификатор таймера
@@ -104,7 +104,7 @@ alert(timerId); // всё ещё число, оно не обнуляется п
Метод `setInterval` имеет синтаксис, аналогичный `setTimeout`.
```js
-var timerId = setInterval(func/code, delay[, arg1, arg2...])
+var timerId = setInterval(func / code, delay[, arg1, arg2...])
```
Смысл аргументов -- тот же самый. Но, в отличие от `setTimeout`, он запускает выполнение функции не один раз, а регулярно повторяет её через указанный интервал времени. Остановить исполнение можно вызовом `clearInterval(timerId)`.
@@ -114,14 +114,14 @@ var timerId = setInterval(func/code, delay[, arg1, arg2...])
```js
//+ run
// начать повторы с интервалом 2 сек
-var timerId = setInterval(function() {
- alert("тик");
+var timerId = setInterval(function() {
+ alert( "тик" );
}, 2000);
// через 5 сек остановить повторы
-setTimeout(function() {
+setTimeout(function() {
clearInterval(timerId);
- alert('стоп');
+ alert( 'стоп' );
}, 5000);
```
@@ -141,12 +141,12 @@ setTimeout(function() {
```js
/** вместо:
var timerId = setInterval(function() {
- alert("тик");
+ alert( "тик" );
}, 2000);
*/
var timerId = setTimeout(function tick() {
- alert("тик");
+ alert( "тик" );
*!*
timerId = setTimeout(tick, 2000);
*/!*
diff --git a/1-js/7-js-misc/4-eval/1-eval-calculator/solution.md b/1-js/7-js-misc/4-eval/1-eval-calculator/solution.md
index aed1c355..0ad14328 100644
--- a/1-js/7-js-misc/4-eval/1-eval-calculator/solution.md
+++ b/1-js/7-js-misc/4-eval/1-eval-calculator/solution.md
@@ -4,7 +4,7 @@
//+ demo run
var expr = prompt("Введите выражение?", '2*3+2');
-alert(eval(expr));
+alert( eval(expr) );
```
При этом посетитель потенциально может делать все, что угодно.
diff --git a/1-js/7-js-misc/4-eval/article.md b/1-js/7-js-misc/4-eval/article.md
index 26f6ee40..c8df6f79 100644
--- a/1-js/7-js-misc/4-eval/article.md
+++ b/1-js/7-js-misc/4-eval/article.md
@@ -10,7 +10,7 @@
В простейшем случае `eval` всего лишь выполняет код, например:
```js
-//+ run
+//+ run no-beautify
var a = 1;
(function() {
@@ -42,8 +42,8 @@ alert( eval('1+1') ); // 2
```js
//+ untrusted refresh run
var x = 5;
-eval(" alert(x); x = 10"); // 5, доступ к старому значению
-alert(x); // 10, значение изменено внутри eval
+eval(" alert( x ); x = 10"); // 5, доступ к старому значению
+alert( x ); // 10, значение изменено внутри eval
```
[smart header="В строгом режиме `eval` имеет свою область видимости "]
@@ -58,7 +58,7 @@ alert(x); // 10, значение изменено внутри eval
*!*
eval("var a = 5; function f() { }");
*/!*
-alert(a); // ошибка, переменная не определена
+alert( a ); // ошибка, переменная не определена
// функция f тоже не видна снаружи
```
@@ -93,7 +93,7 @@ function sayHi() {
```js
function sayHi() {
var phrase = "Привет";
- alert(phrase);
+ alert( phrase );
}
```
@@ -102,7 +102,7 @@ function sayHi() {
```js
function sayHi() {
var a = "Привет";
- alert(a);
+ alert( a );
}
```
@@ -110,7 +110,7 @@ function sayHi() {
```js
function sayHi() {
- alert("Привет");
+ alert( "Привет" );
}
```
@@ -134,7 +134,7 @@ function sayHi() {
Вот так:
```js
-//+ run
+//+ run no-beautify
var a = 1;
(function() {
@@ -153,7 +153,7 @@ var a = 1;
Оба способа можно объединить в единой функции `globalEval(code)`, выполняющей код без доступа к локальным переменным:
```js
-//+ run
+//+ run no-beautify
*!*
function globalEval(code) { // объединим два способа в одну функцию
window.execScript ? execScript(code) : window.eval(code);
@@ -185,12 +185,13 @@ var a = 1;
```js
//+ run
-var a = 2, b = 3;
-
+var a = 2,
+ b = 3;
+
*!*
// вместо обращения к a,b через eval
// будем принимать их как аргументы динамически созданной функции
-var mul = new Function('a, b', ' return a * b;');
+var mul = new Function('a, b', ' return a * b;');
*/!*
alert( mul(a, b) ); // 6
@@ -206,7 +207,7 @@ alert( mul(a, b) ); // 6
```js
//+ run
-var str= '{ \
+var str = '{ \
"name": "Вася", \
"age": 25 \
}';
@@ -215,7 +216,7 @@ var str= '{ \
var user = eval('(' + str + ')');
*/!*
-alert(user.name); // Вася
+alert( user.name ); // Вася
```
Зачем здесь нужны скобки `eval( '(' + str + ')' )`, почему не просто `eval(str)`?
@@ -228,15 +229,15 @@ alert(user.name); // Вася
```js
//+ run
-var user = eval( '{ "name": "Вася", "age": 25 }' );
+var user = eval('{ "name": "Вася", "age": 25 }');
```
А если `eval` получает выражение в скобках `( ... )`, то интерпретатор точно знает, что это не блок кода, а объект:
```js
//+ run
-var user = eval( '( { "name": "Вася", "age": 25 } )' );
-alert(user.age); // 25
+var user = eval('( { "name": "Вася", "age": 25 } )');
+alert( user.age ); // 25
```
[warn header="Осторожно, злой JSON!"]
diff --git a/1-js/7-js-misc/5-exception/1-finally-ili-prosto-kod/solution.md b/1-js/7-js-misc/5-exception/1-finally-ili-prosto-kod/solution.md
index d976cbee..5befa284 100644
--- a/1-js/7-js-misc/5-exception/1-finally-ili-prosto-kod/solution.md
+++ b/1-js/7-js-misc/5-exception/1-finally-ili-prosto-kod/solution.md
@@ -11,10 +11,10 @@ function f() {
*!*
return result;
*/!*
- } catch(e) {
+ } catch (e) {
...
} finally {
- очистить ресурсы
+ очистить ресурсы
}
}
```
@@ -25,17 +25,17 @@ function f() {
function f() {
try {
...
-
- } catch(e) {
+
+ } catch (e) {
...
- if (не умею обрабатывать эту ошибку) {
+ if(не умею обрабатывать эту ошибку) {
*!*
throw e;
*/!*
}
} finally {
- очистить ресурсы
+ очистить ресурсы
}
}
```
diff --git a/1-js/7-js-misc/5-exception/1-finally-ili-prosto-kod/task.md b/1-js/7-js-misc/5-exception/1-finally-ili-prosto-kod/task.md
index 29b0cbe6..5c93daf5 100644
--- a/1-js/7-js-misc/5-exception/1-finally-ili-prosto-kod/task.md
+++ b/1-js/7-js-misc/5-exception/1-finally-ili-prosto-kod/task.md
@@ -11,11 +11,11 @@
try {
начать работу
работать
-} catch(e) {
+} catch (e) {
обработать ошибку
} finally {
*!*
- финализация: завершить работу
+ финализация: завершить работу
*/!*
}
```
@@ -26,9 +26,9 @@ try {
```js
try {
начать работу
-} catch(e) {
+} catch (e) {
обработать ошибку
-}
+}
*!*
финализация: завершить работу
diff --git a/1-js/7-js-misc/5-exception/2-eval-calculator-errors/solution.md b/1-js/7-js-misc/5-exception/2-eval-calculator-errors/solution.md
index 7fda9e72..a9cd06aa 100644
--- a/1-js/7-js-misc/5-exception/2-eval-calculator-errors/solution.md
+++ b/1-js/7-js-misc/5-exception/2-eval-calculator-errors/solution.md
@@ -15,7 +15,7 @@ alert( eval("2+2") ); // 4
//+ run demo
var expr, res;
-while(true) {
+while (true) {
expr = prompt("Введите выражение?", '2-');
if (expr == null) break;
@@ -26,11 +26,11 @@ while(true) {
}
break;
- } catch(e) {
- alert("Ошибка: "+e.message+", повторите ввод");
+ } catch (e) {
+ alert( "Ошибка: " + e.message + ", повторите ввод" );
}
}
-alert(res);
+alert( res );
```
diff --git a/1-js/7-js-misc/5-exception/article.md b/1-js/7-js-misc/5-exception/article.md
index 66798663..f7cb01ed 100644
--- a/1-js/7-js-misc/5-exception/article.md
+++ b/1-js/7-js-misc/5-exception/article.md
@@ -19,7 +19,7 @@ try {
// код ...
-} catch(err) {
+} catch (err) {
// обработка ошибки
@@ -101,11 +101,11 @@ alert("Потом код продолжит выполнение...");
```js
//+ run
try {
- setTimeout(function() {
+ setTimeout(function() {
throw new Error(); // вылетит в консоль
}, 1000);
-} catch(e) {
- alert("не сработает");
+} catch (e) {
+ alert( "не сработает" );
}
```
@@ -169,11 +169,11 @@ var data = "Has Error"; // в данных ошибка
try {
var user = JSON.parse(data); // <-- ошибка при выполнении
- alert(user.name); // не сработает
+ alert( user.name ); // не сработает
-} catch(e) {
+} catch (e) {
// ...выполнится catch
- alert( "Извините, в данных ошибка, мы попробуем получить их ещё раз");
+ alert( "Извините, в данных ошибка, мы попробуем получить их ещё раз" );
alert( e.name );
alert( e.message );
}
@@ -193,12 +193,12 @@ try {
var user = JSON.parse(data); // <-- выполнится без ошибок
*!*
- alert(user.name); // undefined
+ alert( user.name ); // undefined
*/!*
-} catch(e) {
+} catch (e) {
// не выполнится
- alert( "Извините, в данных ошибка");
+ alert( "Извините, в данных ошибка" );
}
```
@@ -234,10 +234,10 @@ try {
}
*/!*
- alert(user.name);
+ alert( user.name );
-} catch(e) {
- alert( "Извините, в данных ошибка");
+} catch (e) {
+ alert( "Извините, в данных ошибка" );
}
```
@@ -265,7 +265,7 @@ var data = '{ "name": "Вася", "age": 30 }'; // данные корректн
try {
- var user = JSON.parse(data);
+ var user = JSON.parse(data);
if (!user.name) {
throw new SyntaxError("Ошибка в данных");
@@ -275,13 +275,13 @@ try {
blabla(); // произошла непредусмотренная ошибка
*/!*
- alert(user.name);
+ alert( user.name );
-} catch(e) {
+} catch (e) {
-*!*
+*!*
if (e.name == "SyntaxError") {
- alert( "Извините, в данных ошибка");
+ alert( "Извините, в данных ошибка" );
} else {
throw e;
}
@@ -297,14 +297,14 @@ try {
```js
//+ run
function readData() {
- var data = '{ "name": "Вася", "age": 30 }';
+ var data = '{ "name": "Вася", "age": 30 }';
try {
// ...
*!*
blabla(); // ошибка!
*/!*
- } catch(e) {
+ } catch (e) {
// ...
*!*
if (e.name != 'SyntaxError') {
@@ -317,9 +317,9 @@ function readData() {
try {
readData();
-} catch(e) {
+} catch (e) {
*!*
- alert("Поймал во внешнем catch: " + e); // ловим
+ alert( "Поймал во внешнем catch: " + e ); // ловим
*/!*
}
```
@@ -357,13 +357,13 @@ function ReadError(message, cause) {
}
function readData() {
- var data = '{ bad data }';
+ var data = '{ bad data }';
try {
// ...
JSON.parse(data);
// ...
- } catch(e) {
+ } catch (e) {
// ...
if (e.name == 'URIError') {
throw new ReadError("Ошибка в URI", e);
@@ -380,10 +380,10 @@ function readData() {
try {
readData();
-} catch(e) {
+} catch (e) {
if (e.name == 'ReadError') {
- alert(e.message);
- alert(e.cause); // оригинальная ошибка-причина
+ alert( e.message );
+ alert( e.cause ); // оригинальная ошибка-причина
} else {
throw e;
}
@@ -419,12 +419,12 @@ try {
```js
//+ run
try {
- alert('try');
+ alert( 'try' );
if (confirm('Сгенерировать ошибку?')) BAD_CODE();
-} catch(e) {
- alert('catch');
+} catch (e) {
+ alert( 'catch' );
} finally {
- alert('finally');
+ alert( 'finally' );
}
```
@@ -441,7 +441,7 @@ try {
```js
//+ run
function sum(n) {
- return n ? (n + sum(n-1)) : 0;
+ return n ? (n + sum(n - 1)) : 0;
}
var n = +prompt('Введите n?', 100);
@@ -450,7 +450,7 @@ var start = new Date();
try {
var result = sum(n);
-} catch(e) {
+} catch (e) {
result = 0;
*!*
} finally {
@@ -458,8 +458,8 @@ try {
}
*/!*
-alert(result ? result : 'была ошибка');
-alert("Выполнение заняло " + diff);
+alert( result ? result : 'была ошибка' );
+alert( "Выполнение заняло " + diff );
```
Здесь секция `finally` гарантирует, что время будет подсчитано в любых ситуациях -- при ошибке в `sum` или без неё.
@@ -475,16 +475,16 @@ alert("Выполнение заняло " + diff);
```js
//+ run
function func() {
-
+
try {
// сразу вернуть значение
return 1;
- } catch(e) {
+ } catch (e) {
/* ... */
} finally {
*!*
- alert('finally');
+ alert( 'finally' );
*/!*
}
}
@@ -502,7 +502,7 @@ function func() {
try {
return 1;
} finally {
- alert('Вызов завершён');
+ alert( 'Вызов завершён' );
}
}
@@ -529,17 +529,17 @@ alert( func() ); // сначала finally, потом 1
```
diff --git a/1-js/8-oop/1-about-oop/article.md b/1-js/8-oop/1-about-oop/article.md
index fc863b66..9039a50c 100644
--- a/1-js/8-oop/1-about-oop/article.md
+++ b/1-js/8-oop/1-about-oop/article.md
@@ -25,13 +25,13 @@
function User(name) {
this.sayHi = function() {
- alert("Привет, я " + name);
+ alert( "Привет, я " + name );
};
}
var vasya = new User("Вася"); // создали пользователя
-vasya.sayHi(); // пользователь умеет говорить "Привет"
+vasya.sayHi(); // пользователь умеет говорить "Привет"
```
Здесь мы видим ярко выраженную сущность -- `User` (посетитель). Используя терминологию ООП, такие конструкторы часто называют *классами*, то есть можно сказать "класс `User`".
diff --git a/1-js/8-oop/2-internal-external-interface/1-add-method-property-coffeemachine/solution.md b/1-js/8-oop/2-internal-external-interface/1-add-method-property-coffeemachine/solution.md
index 2fd8f40f..64982142 100644
--- a/1-js/8-oop/2-internal-external-interface/1-add-method-property-coffeemachine/solution.md
+++ b/1-js/8-oop/2-internal-external-interface/1-add-method-property-coffeemachine/solution.md
@@ -5,7 +5,7 @@
function CoffeeMachine(power) {
this.waterAmount = 0;
- var WATER_HEAT_CAPACITY = 4200;
+ var WATER_HEAT_CAPACITY = 4200;
*!*
var timerId;
*/!*
@@ -16,7 +16,7 @@ function CoffeeMachine(power) {
}
function onReady() {
- alert('Кофе готово!');
+ alert( 'Кофе готово!' );
}
this.run = function() {
diff --git a/1-js/8-oop/2-internal-external-interface/1-add-method-property-coffeemachine/task.md b/1-js/8-oop/2-internal-external-interface/1-add-method-property-coffeemachine/task.md
index 33123bf7..cd471175 100644
--- a/1-js/8-oop/2-internal-external-interface/1-add-method-property-coffeemachine/task.md
+++ b/1-js/8-oop/2-internal-external-interface/1-add-method-property-coffeemachine/task.md
@@ -8,7 +8,7 @@
function CoffeeMachine(power) {
this.waterAmount = 0;
- var WATER_HEAT_CAPACITY = 4200;
+ var WATER_HEAT_CAPACITY = 4200;
var self = this;
@@ -17,7 +17,7 @@ function CoffeeMachine(power) {
}
function onReady() {
- alert('Кофе готово!');
+ alert( 'Кофе готово!' );
}
this.run = function() {
@@ -32,7 +32,7 @@ function CoffeeMachine(power) {
```js
var coffeeMachine = new CoffeeMachine(50000);
coffeeMachine.waterAmount = 200;
-
+
coffeeMachine.run();
coffeeMachine.stop(); // кофе приготовлен не будет
```
diff --git a/1-js/8-oop/2-internal-external-interface/article.md b/1-js/8-oop/2-internal-external-interface/article.md
index 291e205d..ef32e696 100644
--- a/1-js/8-oop/2-internal-external-interface/article.md
+++ b/1-js/8-oop/2-internal-external-interface/article.md
@@ -60,8 +60,8 @@
//+ run
function CoffeeMachine(power) {
this.waterAmount = 0; // количество воды в кофеварке
-
- alert('Создана кофеварка мощностью: ' + power + ' ватт');
+
+ alert( 'Создана кофеварка мощностью: ' + power + ' ватт' );
}
// создать кофеварку
@@ -107,10 +107,10 @@ function CoffeeMachine(power) {
function getBoilTime() {
return 1000; // точная формула расчета будет позже
}
-
+
// что делать по окончании процесса
function onReady() {
- alert('Кофе готово!');
+ alert( 'Кофе готово!' );
}
this.run = function() {
@@ -153,21 +153,21 @@ function CoffeeMachine(power) {
*!*
// физическая константа - удельная теплоёмкость воды для getBoilTime
- var WATER_HEAT_CAPACITY = 4200;
+ var WATER_HEAT_CAPACITY = 4200;
// расчёт времени для кипячения
function getBoilTime() {
- return this.waterAmount * WATER_HEAT_CAPACITY * 80 / power; // ошибка!
- }
+ return this.waterAmount * WATER_HEAT_CAPACITY * 80 / power; // ошибка!
+ }
*/!*
// что делать по окончании процесса
function onReady() {
- alert('Кофе готово!');
+ alert( 'Кофе готово!' );
}
this.run = function() {
- setTimeout(onReady, getBoilTime());
+ setTimeout(onReady, getBoilTime());
};
}
@@ -192,14 +192,14 @@ coffeeMachine.run();
//+ run
function CoffeeMachine(power) {
this.waterAmount = 0;
- var WATER_HEAT_CAPACITY = 4200;
+ var WATER_HEAT_CAPACITY = 4200;
function getBoilTime() {
return this.waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
function onReady() {
- alert('Кофе готово!');
+ alert( 'Кофе готово!' );
}
this.run = function() {
@@ -230,7 +230,7 @@ coffeeMachine.run();
function CoffeeMachine(power) {
this.waterAmount = 0;
- var WATER_HEAT_CAPACITY = 4200;
+ var WATER_HEAT_CAPACITY = 4200;
*!*
var getBoilTime = function() {
@@ -239,7 +239,7 @@ function CoffeeMachine(power) {
*/!*
function onReady() {
- alert('Кофе готово!');
+ alert( 'Кофе готово!' );
}
this.run = function() {
@@ -269,18 +269,18 @@ coffeeMachine.run();
function CoffeeMachine(power) {
this.waterAmount = 0;
- var WATER_HEAT_CAPACITY = 4200;
+ var WATER_HEAT_CAPACITY = 4200;
*!*
var self = this;
function getBoilTime() {
- return self.waterAmount * WATER_HEAT_CAPACITY * 80 / power;
- }
+ return self.waterAmount * WATER_HEAT_CAPACITY * 80 / power;
+ }
*/!*
function onReady() {
- alert('Кофе готово!');
+ alert( 'Кофе готово!' );
}
this.run = function() {
diff --git a/1-js/8-oop/3-getters-setters/1-object-with-getters-setters/solution.md b/1-js/8-oop/3-getters-setters/1-object-with-getters-setters/solution.md
index 5713cb4e..31f95871 100644
--- a/1-js/8-oop/3-getters-setters/1-object-with-getters-setters/solution.md
+++ b/1-js/8-oop/3-getters-setters/1-object-with-getters-setters/solution.md
@@ -3,7 +3,7 @@
```js
//+ run
function User() {
-
+
var firstName, surName;
this.setFirstName = function(newFirstName) {
diff --git a/1-js/8-oop/3-getters-setters/3-add-public-coffeemachine/solution.md b/1-js/8-oop/3-getters-setters/3-add-public-coffeemachine/solution.md
index d01cf173..41aa318a 100644
--- a/1-js/8-oop/3-getters-setters/3-add-public-coffeemachine/solution.md
+++ b/1-js/8-oop/3-getters-setters/3-add-public-coffeemachine/solution.md
@@ -6,6 +6,7 @@ function CoffeeMachine(power, capacity) {
var waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
+
function getTimeToBoil() {
return waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
@@ -28,7 +29,7 @@ function CoffeeMachine(power, capacity) {
*/!*
function onReady() {
- alert('Кофе готов!');
+ alert( 'Кофе готов!' );
}
this.run = function() {
diff --git a/1-js/8-oop/3-getters-setters/3-add-public-coffeemachine/task.md b/1-js/8-oop/3-getters-setters/3-add-public-coffeemachine/task.md
index 2243e0d3..e123fed4 100644
--- a/1-js/8-oop/3-getters-setters/3-add-public-coffeemachine/task.md
+++ b/1-js/8-oop/3-getters-setters/3-add-public-coffeemachine/task.md
@@ -13,6 +13,7 @@ function CoffeeMachine(power, capacity) {
var waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
+
function getTimeToBoil() {
return waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
@@ -29,7 +30,7 @@ function CoffeeMachine(power, capacity) {
};
function onReady() {
- alert('Кофе готов!');
+ alert( 'Кофе готов!' );
}
this.run = function() {
diff --git a/1-js/8-oop/3-getters-setters/4-setter-onready/solution.md b/1-js/8-oop/3-getters-setters/4-setter-onready/solution.md
index da337433..2aca1b6f 100644
--- a/1-js/8-oop/3-getters-setters/4-setter-onready/solution.md
+++ b/1-js/8-oop/3-getters-setters/4-setter-onready/solution.md
@@ -6,6 +6,7 @@ function CoffeeMachine(power, capacity) {
var waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
+
function getTimeToBoil() {
return waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
@@ -20,7 +21,7 @@ function CoffeeMachine(power, capacity) {
};
function onReady() {
- alert('Кофе готов!');
+ alert( 'Кофе готов!' );
}
*!*
@@ -31,7 +32,9 @@ function CoffeeMachine(power, capacity) {
this.run = function() {
*!*
- setTimeout(function() { onReady(); }, getTimeToBoil());
+ setTimeout(function() {
+ onReady();
+ }, getTimeToBoil());
*/!*
};
@@ -44,8 +47,8 @@ coffeeMachine.run();
*!*
coffeeMachine.setOnReady(function() {
- var amount = coffeeMachine.getWaterAmount();
- alert('Готов кофе: ' + amount + 'мл'); // Готов кофе: 150 мл
+ var amount = coffeeMachine.getWaterAmount();
+ alert( 'Готов кофе: ' + amount + 'мл' ); // Готов кофе: 150 мл
});
*/!*
```
diff --git a/1-js/8-oop/3-getters-setters/4-setter-onready/task.md b/1-js/8-oop/3-getters-setters/4-setter-onready/task.md
index 1d301654..2e960697 100644
--- a/1-js/8-oop/3-getters-setters/4-setter-onready/task.md
+++ b/1-js/8-oop/3-getters-setters/4-setter-onready/task.md
@@ -11,6 +11,7 @@ function CoffeeMachine(power, capacity) {
var waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
+
function getTimeToBoil() {
return waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
@@ -26,8 +27,8 @@ function CoffeeMachine(power, capacity) {
*!*
function onReady() {
- alert('Кофе готов!');
- }
+ alert( 'Кофе готов!' );
+ }
*/!*
this.run = function() {
@@ -45,8 +46,8 @@ coffeeMachine.setWaterAmount(150);
*!*
coffeeMachine.setOnReady(function() {
- var amount = coffeeMachine.getWaterAmount();
- alert('Готов кофе: ' + amount + 'мл'); // Кофе готов: 150 мл
+ var amount = coffeeMachine.getWaterAmount();
+ alert( 'Готов кофе: ' + amount + 'мл' ); // Кофе готов: 150 мл
});
*/!*
diff --git a/1-js/8-oop/3-getters-setters/5-coffeemachine-add-isrunning/solution.md b/1-js/8-oop/3-getters-setters/5-coffeemachine-add-isrunning/solution.md
index dd4d0cf3..8f61ff53 100644
--- a/1-js/8-oop/3-getters-setters/5-coffeemachine-add-isrunning/solution.md
+++ b/1-js/8-oop/3-getters-setters/5-coffeemachine-add-isrunning/solution.md
@@ -14,6 +14,7 @@ function CoffeeMachine(power, capacity) {
*/!*
var WATER_HEAT_CAPACITY = 4200;
+
function getTimeToBoil() {
return waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
@@ -28,7 +29,7 @@ function CoffeeMachine(power, capacity) {
};
function onReady() {
- alert('Кофе готов!');
+ alert( 'Кофе готов!' );
}
this.setOnReady = function(newOnReady) {
@@ -38,7 +39,7 @@ function CoffeeMachine(power, capacity) {
this.run = function() {
*!*
timerId = setTimeout(function() {
- timerId = null;
+ timerId = null;
onReady();
}, getTimeToBoil());
};
@@ -49,13 +50,13 @@ function CoffeeMachine(power, capacity) {
var coffeeMachine = new CoffeeMachine(20000, 500);
coffeeMachine.setWaterAmount(100);
-alert('До: ' + coffeeMachine.isRunning()); // До: false
+alert( 'До: ' + coffeeMachine.isRunning() ); // До: false
coffeeMachine.run();
-alert('В процессе: ' + coffeeMachine.isRunning()); // В процессе: true
+alert( 'В процессе: ' + coffeeMachine.isRunning() ); // В процессе: true
coffeeMachine.setOnReady(function() {
- alert("После: " + coffeeMachine.isRunning()); // После: false
+ alert( "После: " + coffeeMachine.isRunning() ); // После: false
});
```
diff --git a/1-js/8-oop/3-getters-setters/5-coffeemachine-add-isrunning/task.md b/1-js/8-oop/3-getters-setters/5-coffeemachine-add-isrunning/task.md
index 45cb1d97..4fd21cdf 100644
--- a/1-js/8-oop/3-getters-setters/5-coffeemachine-add-isrunning/task.md
+++ b/1-js/8-oop/3-getters-setters/5-coffeemachine-add-isrunning/task.md
@@ -12,13 +12,13 @@
var coffeeMachine = new CoffeeMachine(20000, 500);
coffeeMachine.setWaterAmount(100);
-alert('До: ' + coffeeMachine.isRunning()); // До: false
+alert( 'До: ' + coffeeMachine.isRunning() ); // До: false
coffeeMachine.run();
-alert('В процессе: ' + coffeeMachine.isRunning()); // В процессе: true
+alert( 'В процессе: ' + coffeeMachine.isRunning() ); // В процессе: true
coffeeMachine.setOnReady(function() {
- alert("После: " + coffeeMachine.isRunning()); // После: false
+ alert( "После: " + coffeeMachine.isRunning() ); // После: false
});
```
diff --git a/1-js/8-oop/3-getters-setters/article.md b/1-js/8-oop/3-getters-setters/article.md
index c961d184..e97a6e1b 100644
--- a/1-js/8-oop/3-getters-setters/article.md
+++ b/1-js/8-oop/3-getters-setters/article.md
@@ -45,6 +45,7 @@ function CoffeeMachine(power, capacity) { // capacity - ёмкость кофе
var waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
+
function getTimeToBoil() {
return waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
@@ -64,7 +65,7 @@ function CoffeeMachine(power, capacity) { // capacity - ёмкость кофе
*/!*
function onReady() {
- alert('Кофе готов!');
+ alert( 'Кофе готов!' );
}
this.run = function() {
@@ -106,7 +107,7 @@ function CoffeeMachine(power, capacity) {
}
var coffeeMachine = new CoffeeMachine(1000, 500);
-coffeeMachine.setWaterAmount(450);
+coffeeMachine.setWaterAmount(450);
alert( coffeeMachine.getWaterAmount() ); // 450
```
@@ -146,7 +147,7 @@ var coffeeMachine = new CoffeeMachine(1000, 500);
// пример использования
*!*
-coffeeMachine.waterAmount(450);
+coffeeMachine.waterAmount(450);
alert( coffeeMachine.waterAmount() ); // 450
*/!*
```
diff --git a/1-js/8-oop/5-functional-inheritance/1-coffeemachine-fix-run/task.md b/1-js/8-oop/5-functional-inheritance/1-coffeemachine-fix-run/task.md
index a4e84aae..d90fce6a 100644
--- a/1-js/8-oop/5-functional-inheritance/1-coffeemachine-fix-run/task.md
+++ b/1-js/8-oop/5-functional-inheritance/1-coffeemachine-fix-run/task.md
@@ -15,7 +15,7 @@ coffeeMachine.run(); // ошибка, кофеварка выключена!
```js
var coffeeMachine = new CoffeeMachine(10000);
-coffeeMachine.enable();
+coffeeMachine.enable();
coffeeMachine.run(); // ...Кофе готов!
```
diff --git a/1-js/8-oop/5-functional-inheritance/3-inherit-fridge/solution.md b/1-js/8-oop/5-functional-inheritance/3-inherit-fridge/solution.md
index f5a6c779..38957f28 100644
--- a/1-js/8-oop/5-functional-inheritance/3-inherit-fridge/solution.md
+++ b/1-js/8-oop/5-functional-inheritance/3-inherit-fridge/solution.md
@@ -14,16 +14,16 @@ function Fridge(power) {
if (food.length + arguments.length >= this._power / 100) {
throw new Error("Нельзя добавить, не хватает мощности");
}
- for(var i=0; i= this._power / 100) {
throw new Error("Нельзя добавить, не хватает мощности");
}
- for(var i=0; i= this._power / 100) {
throw new Error("Нельзя добавить, не хватает мощности");
}
- for(var i=0; i
@@ -46,13 +50,18 @@ alert(rabbit.eats); // true
```js
//+ run
-var animal = { eats: true };
-var rabbit = { jumps: true, eats: false };
+var animal = {
+ eats: true
+};
+var rabbit = {
+ jumps: true,
+ eats: false
+};
rabbit.__proto__ = animal;
*!*
-alert(rabbit.eats); // false, свойство взято из rabbit
+alert( rabbit.eats ); // false, свойство взято из rabbit
*/!*
```
@@ -86,7 +95,7 @@ var rabbit = {
*!*
for (var key in rabbit) {
- alert (key + " = " + rabbit[key]); // выводит и "eats" и "jumps"
+ alert( key + " = " + rabbit[key] ); // выводит и "eats" и "jumps"
}
*/!*
```
@@ -130,9 +139,9 @@ var rabbit = {
for (var key in rabbit) {
*!*
- if ( !rabbit.hasOwnProperty(key) ) continue; // пропустить "не свои" свойства
+ if (!rabbit.hasOwnProperty(key)) continue; // пропустить "не свои" свойства
*/!*
- alert (key + " = " + rabbit[key]); // выводит только "jumps"
+ alert( key + " = " + rabbit[key] ); // выводит только "jumps"
}
```
diff --git a/1-js/9-prototypes/2-new-prototype/1-prototype-after-new/task.md b/1-js/9-prototypes/2-new-prototype/1-prototype-after-new/task.md
index 5ebab1fe..f8ea33a7 100644
--- a/1-js/9-prototypes/2-new-prototype/1-prototype-after-new/task.md
+++ b/1-js/9-prototypes/2-new-prototype/1-prototype-after-new/task.md
@@ -9,71 +9,81 @@
Начнём с этого кода. Что он выведет?
```js
-function Rabbit() { }
-Rabbit.prototype = { eats: true };
+function Rabbit() {}
+Rabbit.prototype = {
+ eats: true
+};
-var rabbit = new Rabbit();
+var rabbit = new Rabbit();
-alert(rabbit.eats);
+alert( rabbit.eats );
```
Добавили строку (выделена), что будет теперь?
```js
-function Rabbit() { }
-Rabbit.prototype = { eats: true };
+function Rabbit() {}
+Rabbit.prototype = {
+ eats: true
+};
-var rabbit = new Rabbit();
+var rabbit = new Rabbit();
*!*
Rabbit.prototype = {};
*/!*
-alert(rabbit.eats);
+alert( rabbit.eats );
```
А если код будет такой? (заменена одна строка):
```js
-function Rabbit(name) { }
-Rabbit.prototype = { eats: true };
+function Rabbit(name) {}
+Rabbit.prototype = {
+ eats: true
+};
-var rabbit = new Rabbit();
+var rabbit = new Rabbit();
*!*
Rabbit.prototype.eats = false;
*/!*
-alert(rabbit.eats);
+alert( rabbit.eats );
```
А такой? (заменена одна строка)
```js
-function Rabbit(name) { }
-Rabbit.prototype = { eats: true };
+function Rabbit(name) {}
+Rabbit.prototype = {
+ eats: true
+};
-var rabbit = new Rabbit();
+var rabbit = new Rabbit();
-*!*
+*!*
delete rabbit.eats; // (*)
*/!*
-alert(rabbit.eats);
+alert( rabbit.eats );
```
И последний вариант:
```js
-function Rabbit(name) { }
-Rabbit.prototype = { eats: true };
+function Rabbit(name) {}
+Rabbit.prototype = {
+ eats: true
+};
-var rabbit = new Rabbit();
+var rabbit = new Rabbit();
-*!*
+*!*
delete Rabbit.prototype.eats; // (*)
*/!*
-alert(rabbit.eats);
+alert( rabbit.eats );
```
diff --git a/1-js/9-prototypes/2-new-prototype/2-default-arguments/solution.md b/1-js/9-prototypes/2-new-prototype/2-default-arguments/solution.md
index 7dec9540..222e9083 100644
--- a/1-js/9-prototypes/2-new-prototype/2-default-arguments/solution.md
+++ b/1-js/9-prototypes/2-new-prototype/2-default-arguments/solution.md
@@ -6,8 +6,8 @@ function Menu(options) {
options = Object.create(options);
options.width = options.width || 300;
- alert(options.width); // возьмёт width из наследника
- alert(options.height); // возьмёт height из исходного объекта
+ alert( options.width ); // возьмёт width из наследника
+ alert( options.height ); // возьмёт height из исходного объекта
...
}
```
diff --git a/1-js/9-prototypes/2-new-prototype/3-compare-calls/solution.md b/1-js/9-prototypes/2-new-prototype/3-compare-calls/solution.md
index ac2d442b..1b268b84 100644
--- a/1-js/9-prototypes/2-new-prototype/3-compare-calls/solution.md
+++ b/1-js/9-prototypes/2-new-prototype/3-compare-calls/solution.md
@@ -8,8 +8,12 @@
```js
//+ run
-function Rabbit(name) { this.name = name; }
-Rabbit.prototype.sayHi = function() { alert(this.name); }
+function Rabbit(name) {
+ this.name = name;
+}
+Rabbit.prototype.sayHi = function() {
+ alert( this.name );
+}
var rabbit = new Rabbit("Rabbit");
diff --git a/1-js/9-prototypes/2-new-prototype/3-compare-calls/task.md b/1-js/9-prototypes/2-new-prototype/3-compare-calls/task.md
index 98f1d037..b3773dfa 100644
--- a/1-js/9-prototypes/2-new-prototype/3-compare-calls/task.md
+++ b/1-js/9-prototypes/2-new-prototype/3-compare-calls/task.md
@@ -5,8 +5,12 @@
Создадим новый объект, вот такой:
```js
-function Rabbit(name) { this.name = name; }
-Rabbit.prototype.sayHi = function() { alert(this.name); }
+function Rabbit(name) {
+ this.name = name;
+}
+Rabbit.prototype.sayHi = function() {
+ alert( this.name );
+}
var rabbit = new Rabbit("Rabbit");
```
diff --git a/1-js/9-prototypes/2-new-prototype/4-new-object-same-constructor/solution.md b/1-js/9-prototypes/2-new-prototype/4-new-object-same-constructor/solution.md
index ffaea872..eae8b524 100644
--- a/1-js/9-prototypes/2-new-prototype/4-new-object-same-constructor/solution.md
+++ b/1-js/9-prototypes/2-new-prototype/4-new-object-same-constructor/solution.md
@@ -4,14 +4,14 @@
```js
//+ run
-function User(name) {
+function User(name) {
this.name = name;
}
var obj = new User('Вася');
var obj2 = new obj.constructor('Петя');
-alert(obj2.name); // Петя (сработало)
+alert( obj2.name ); // Петя (сработало)
```
Сработало, так как `User.prototype.constructor == User`.
@@ -20,9 +20,9 @@ alert(obj2.name); // Петя (сработало)
```js
//+ run
-function User(name) {
- this.name = name;
-}
+function User(name) {
+ this.name = name;
+ }
*!*
User.prototype = {};
*/!*
@@ -30,5 +30,5 @@ User.prototype = {};
var obj = new User('Вася');
var obj2 = new obj.constructor('Петя');
-alert(obj2.name); // undefined
+alert( obj2.name ); // undefined
```
\ No newline at end of file
diff --git a/1-js/9-prototypes/2-new-prototype/article.md b/1-js/9-prototypes/2-new-prototype/article.md
index 95f41b1d..70120f02 100644
--- a/1-js/9-prototypes/2-new-prototype/article.md
+++ b/1-js/9-prototypes/2-new-prototype/article.md
@@ -13,7 +13,9 @@
```js
//+ run
-var animal = { eats: true };
+var animal = {
+ eats: true
+};
function Rabbit(name) {
this.name = name;
@@ -39,9 +41,11 @@ alert( rabbit.eats ); // true, из прототипа
```js
//+ run
-var animal = { eats: true };
+var animal = {
+ eats: true
+};
-function Rabbit(name) {
+function Rabbit(name) {
this.name = name;
}
@@ -77,7 +81,7 @@ alert( rabbit.eats ); // true
Оно содержит объект такого вида:
```js
-function Rabbit() { }
+function Rabbit() {}
Rabbit.prototype = {
constructor: Rabbit
@@ -90,22 +94,22 @@ Rabbit.prototype = {
```js
//+ run
-function Rabbit() { }
+function Rabbit() {}
// в Rabbit.prototype есть одно свойство: constructor
-alert(Object.getOwnPropertyNames(Rabbit.prototype)); // constructor
+alert( Object.getOwnPropertyNames(Rabbit.prototype) ); // constructor
// оно равно Rabbit
-alert(Rabbit.prototype.constructor == Rabbit); // true
+alert( Rabbit.prototype.constructor == Rabbit ); // true
```
Можно его использовать для создания объекта с тем же конструктором, что и данный:
```js
//+ run
-function Rabbit(name) {
+function Rabbit(name) {
this.name = name;
- alert(name);
+ alert( name );
}
var rabbit = new Rabbit("Кроль");
@@ -163,11 +167,13 @@ function inherit(proto) {
```js
//+ run
-var animal = { eats: true };
+var animal = {
+ eats: true
+};
-var rabbit = inherit(animal);
-
-alert(rabbit.eats); // true
+var rabbit = inherit(animal);
+
+alert( rabbit.eats ); // true
```
Посмотрите внимательно на функцию `inherit` и вы, наверняка, сами поймёте, как она работает...
@@ -175,6 +181,7 @@ alert(rabbit.eats); // true
Если где-то неясности, то её построчное описание:
```js
+//+ no-beautify
function inherit(proto) {
function F() {} // (1)
F.prototype = proto // (2)
diff --git a/1-js/9-prototypes/3-native-prototypes/1-defer-to-prototype/solution.md b/1-js/9-prototypes/3-native-prototypes/1-defer-to-prototype/solution.md
index 2db51390..46d09410 100644
--- a/1-js/9-prototypes/3-native-prototypes/1-defer-to-prototype/solution.md
+++ b/1-js/9-prototypes/3-native-prototypes/1-defer-to-prototype/solution.md
@@ -7,7 +7,7 @@ Function.prototype.defer = function(ms) {
}
function f() {
- alert("привет");
+ alert( "привет" );
}
f.defer(1000); // выведет "привет" через 1 секунду
diff --git a/1-js/9-prototypes/3-native-prototypes/1-defer-to-prototype/task.md b/1-js/9-prototypes/3-native-prototypes/1-defer-to-prototype/task.md
index 01e01567..000adcc5 100644
--- a/1-js/9-prototypes/3-native-prototypes/1-defer-to-prototype/task.md
+++ b/1-js/9-prototypes/3-native-prototypes/1-defer-to-prototype/task.md
@@ -8,7 +8,7 @@
```js
function f() {
- alert("привет");
+ alert( "привет" );
}
f.defer(1000); // выведет "привет" через 1 секунду
diff --git a/1-js/9-prototypes/3-native-prototypes/2-defer-to-prototype-extended/solution.md b/1-js/9-prototypes/3-native-prototypes/2-defer-to-prototype-extended/solution.md
index 9a262a07..6c421265 100644
--- a/1-js/9-prototypes/3-native-prototypes/2-defer-to-prototype-extended/solution.md
+++ b/1-js/9-prototypes/3-native-prototypes/2-defer-to-prototype-extended/solution.md
@@ -5,7 +5,8 @@
Function.prototype.defer = function(ms) {
var f = this;
return function() {
- var args = arguments, context = this;
+ var args = arguments,
+ context = this;
setTimeout(function() {
f.apply(context, args);
}, ms);
@@ -14,7 +15,7 @@ Function.prototype.defer = function(ms) {
// проверка
function f(a, b) {
- alert(a + b);
+ alert( a + b );
}
f.defer(1000)(1, 2); // выведет 3 через 1 секунду.
diff --git a/1-js/9-prototypes/3-native-prototypes/2-defer-to-prototype-extended/task.md b/1-js/9-prototypes/3-native-prototypes/2-defer-to-prototype-extended/task.md
index e7efba30..ddb3d4ba 100644
--- a/1-js/9-prototypes/3-native-prototypes/2-defer-to-prototype-extended/task.md
+++ b/1-js/9-prototypes/3-native-prototypes/2-defer-to-prototype-extended/task.md
@@ -8,7 +8,7 @@
```js
function f(a, b) {
- alert(a + b);
+ alert( a + b );
}
f.defer(1000)(1, 2); // выведет 3 через 1 секунду.
diff --git a/1-js/9-prototypes/3-native-prototypes/article.md b/1-js/9-prototypes/3-native-prototypes/article.md
index 086c4219..623ebe89 100644
--- a/1-js/9-prototypes/3-native-prototypes/article.md
+++ b/1-js/9-prototypes/3-native-prototypes/article.md
@@ -10,7 +10,7 @@
```js
//+ run
-var obj = { };
+var obj = {};
alert( obj ); // "[object Object]" ?
```
@@ -39,16 +39,16 @@ alert( {}.__proto__.toString ); // function toString
```js
//+ run
-var obj = { };
+var obj = {};
// метод берётся из прототипа?
-alert(obj.toString == Object.prototype.toString); // true, да
+alert( obj.toString == Object.prototype.toString ); // true, да
// проверим, правда ли что __proto__ это Object.prototype?
-alert(obj.__proto__ == Object.prototype); // true
+alert( obj.__proto__ == Object.prototype ); // true
// А есть ли __proto__ у Object.prototype?
-alert(obj.__proto__.__proto__); // null, нет
+alert( obj.__proto__.__proto__ ); // null, нет
```
## Встроенные "классы" в JavaScript
@@ -146,7 +146,7 @@ var user = "Вася";
user.age = 30;
*!*
-alert(user.age); // undefined
+alert( user.age ); // undefined
*/!*
```
@@ -157,9 +157,9 @@ alert(user.age); // undefined
```js
//+ run
-alert(typeof 1); // "number"
+alert( typeof 1 ); // "number"
-alert(typeof new Number(1)); // "object" ?!?
+alert( typeof new Number(1) ); // "object" ?!?
```
Или, ещё страннее:
@@ -168,8 +168,8 @@ alert(typeof new Number(1)); // "object" ?!?
//+ run
var zero = new Number(0);
-if (zero) { // объект - true, так что alert выполнится
- alert("число ноль -- true?!?");
+if (zero) { // объект - true, так что alert выполнится
+ alert( "число ноль -- true?!?" );
}
```
@@ -192,10 +192,10 @@ if (zero) { // объект - true, так что alert выполнится
```js
//+ run
String.prototype.repeat = function(times) {
- return new Array(times+1).join(this);
+ return new Array(times + 1).join(this);
};
-alert( "ля".repeat(3) ) // ляляля
+alert( "ля".repeat(3) ); // ляляля
```
Аналогично мы могли бы создать метод `Object.prototype.each(func)`, который будет применять `func` к каждому свойству:
@@ -210,10 +210,13 @@ Object.prototype.each = function(f) {
}
// Попробуем! (внимание, пока что это работает неверно!)
-var user = { name: 'Вася', age: 25 };
+var user = {
+ name: 'Вася',
+ age: 25
+};
-user.each(function(prop, val) {
- alert(prop); // name -> age -> (!) each
+user.each(function(prop, val) {
+ alert( prop ); // name -> age -> (!) each
});
```
@@ -240,10 +243,13 @@ Object.prototype.each = function(f) {
};
// Теперь все будет в порядке
-var obj = { name: 'Вася', age: 25 };
+var obj = {
+ name: 'Вася',
+ age: 25
+};
-obj.each(function(prop, val) {
- alert(prop); // name -> age
+obj.each(function(prop, val) {
+ alert( prop ); // name -> age
});
```
@@ -264,14 +270,19 @@ Object.prototype.each = function(f) {
*!*
// поправить объявление свойства, установив флаг enumerable: false
-Object.defineProperty(Object.prototype, 'each', { enumerable: false });
+Object.defineProperty(Object.prototype, 'each', {
+ enumerable: false
+});
*/!*
// Теперь все будет в порядке
-var obj = { name: 'Вася', age: 25 };
+var obj = {
+ name: 'Вася',
+ age: 25
+};
-obj.each(function(prop, val) {
- alert(prop); // name -> age
+obj.each(function(prop, val) {
+ alert( prop ); // name -> age
});
```
diff --git a/1-js/9-prototypes/4-classes/1-rewrite-by-class/solution.md b/1-js/9-prototypes/4-classes/1-rewrite-by-class/solution.md
index 09af813f..a43508c8 100644
--- a/1-js/9-prototypes/4-classes/1-rewrite-by-class/solution.md
+++ b/1-js/9-prototypes/4-classes/1-rewrite-by-class/solution.md
@@ -17,7 +17,7 @@ CoffeeMachine.prototype._getTimeToBoil = function() {
CoffeeMachine.prototype.run = function() {
setTimeout(function() {
- alert('Кофе готов!');
+ alert( 'Кофе готов!' );
}, this._getTimeToBoil());
};
diff --git a/1-js/9-prototypes/4-classes/1-rewrite-by-class/task.md b/1-js/9-prototypes/4-classes/1-rewrite-by-class/task.md
index dadde648..cfc8aa91 100644
--- a/1-js/9-prototypes/4-classes/1-rewrite-by-class/task.md
+++ b/1-js/9-prototypes/4-classes/1-rewrite-by-class/task.md
@@ -13,7 +13,7 @@
function CoffeeMachine(power) {
var waterAmount = 0;
- var WATER_HEAT_CAPACITY = 4200;
+ var WATER_HEAT_CAPACITY = 4200;
function getTimeToBoil() {
return waterAmount * WATER_HEAT_CAPACITY * 80 / power;
@@ -21,7 +21,7 @@ function CoffeeMachine(power) {
this.run = function() {
setTimeout(function() {
- alert('Кофе готов!');
+ alert( 'Кофе готов!' );
}, getTimeToBoil());
};
diff --git a/1-js/9-prototypes/4-classes/2-hamsters-with-proto/solution.md b/1-js/9-prototypes/4-classes/2-hamsters-with-proto/solution.md
index 70cc2fc5..113334fd 100644
--- a/1-js/9-prototypes/4-classes/2-hamsters-with-proto/solution.md
+++ b/1-js/9-prototypes/4-classes/2-hamsters-with-proto/solution.md
@@ -29,7 +29,7 @@ this.food = something;
```js
//+ run
-function Hamster() {
+function Hamster() {
*!*
this.food = [];
*/!*
diff --git a/1-js/9-prototypes/4-classes/2-hamsters-with-proto/task.md b/1-js/9-prototypes/4-classes/2-hamsters-with-proto/task.md
index 452c3d46..63966951 100644
--- a/1-js/9-prototypes/4-classes/2-hamsters-with-proto/task.md
+++ b/1-js/9-prototypes/4-classes/2-hamsters-with-proto/task.md
@@ -12,9 +12,9 @@
```js
//+ run
-function Hamster() { }
+function Hamster() {}
-Hamster.prototype.food = [ ]; // пустой "живот"
+Hamster.prototype.food = []; // пустой "живот"
Hamster.prototype.found = function(something) {
this.food.push(something);
@@ -27,7 +27,7 @@ lazy = new Hamster();
speedy.found("яблоко");
speedy.found("орех");
-alert(speedy.food.length); // 2
-alert(lazy.food.length); // 2 (!??)
+alert( speedy.food.length ); // 2
+alert( lazy.food.length ); // 2 (!??)
```
diff --git a/1-js/9-prototypes/4-classes/article.md b/1-js/9-prototypes/4-classes/article.md
index 03186252..082c22f2 100644
--- a/1-js/9-prototypes/4-classes/article.md
+++ b/1-js/9-prototypes/4-classes/article.md
@@ -14,24 +14,24 @@
function Animal(name) {
this.speed = 0;
this.name = name;
-
+
this.run = function(speed) {
this.speed += speed;
- alert(this.name + ' бежит, скорость ' + this.speed);
+ alert( this.name + ' бежит, скорость ' + this.speed );
};
this.stop = function() {
this.speed = 0;
- alert(this.name + ' стоит');
+ alert( this.name + ' стоит' );
};
};
var animal = new Animal('Зверь');
-alert(animal.speed); // 0, начальная скорость
-animal.run(3); // Зверь бежит, скорость 3
-animal.run(10); // Зверь бежит, скорость 13
-animal.stop(); // Зверь стоит
+alert( animal.speed ); // 0, начальная скорость
+animal.run(3); // Зверь бежит, скорость 3
+animal.run(10); // Зверь бежит, скорость 13
+animal.stop(); // Зверь стоит
```
## Класс через прототип
@@ -58,20 +58,20 @@ function Animal(name) {
// методы в прототипе
Animal.prototype.run = function(speed) {
this.speed += speed;
- alert(this.name + ' бежит, скорость ' + this.speed);
+ alert( this.name + ' бежит, скорость ' + this.speed );
};
Animal.prototype.stop = function() {
this.speed = 0;
- alert(this.name + ' стоит');
+ alert( this.name + ' стоит' );
};
var animal = new Animal('Зверь');
-alert(animal.speed); // 0, свойство взято из прототипа
-animal.run(5); // Зверь бежит, скорость 5
-animal.run(5); // Зверь бежит, скорость 10
-animal.stop(); // Зверь стоит
+alert( animal.speed ); // 0, свойство взято из прототипа
+animal.run(5); // Зверь бежит, скорость 5
+animal.run(5); // Зверь бежит, скорость 10
+animal.stop(); // Зверь стоит
```
В объекте `animal` будут хранится свойства конкретного экземпляра: `name` и `speed`, а общие методы -- в прототипе.
@@ -96,7 +96,7 @@ animal.stop(); // Зверь стоит
function Animal(name) {
this.sayHi = function() {
*!*
- alert(name);
+ alert( name );
*/!*
};
}
@@ -117,7 +117,7 @@ function Animal(name) {
Animal.prototype.sayHi = function() {
*!*
- alert(this._name);
+ alert( this._name );
*/!*
}
diff --git a/1-js/9-prototypes/5-class-inheritance/1-inheritance-error-assign/solution.md b/1-js/9-prototypes/5-class-inheritance/1-inheritance-error-assign/solution.md
index f0b99ed5..8987b2d7 100644
--- a/1-js/9-prototypes/5-class-inheritance/1-inheritance-error-assign/solution.md
+++ b/1-js/9-prototypes/5-class-inheritance/1-inheritance-error-assign/solution.md
@@ -9,7 +9,7 @@ Rabbit.prototype = Animal.prototype;
Получится, что все животные прыгают, вот пример:
```js
-//+ run
+//+ run no-beautify
function Animal(name) {
this.name = name;
}
diff --git a/1-js/9-prototypes/5-class-inheritance/1-inheritance-error-assign/task.md b/1-js/9-prototypes/5-class-inheritance/1-inheritance-error-assign/task.md
index 5b176d3d..54d47cfe 100644
--- a/1-js/9-prototypes/5-class-inheritance/1-inheritance-error-assign/task.md
+++ b/1-js/9-prototypes/5-class-inheritance/1-inheritance-error-assign/task.md
@@ -9,8 +9,8 @@ function Animal(name) {
this.name = name;
}
-Animal.prototype.walk = function() {
- alert("ходит " + this.name);
+Animal.prototype.walk = function() {
+ alert( "ходит " + this.name );
};
function Rabbit(name) {
@@ -18,8 +18,8 @@ function Rabbit(name) {
}
Rabbit.prototype = Animal.prototype;
-Rabbit.prototype.walk = function() {
- alert("прыгает! и ходит: " + this.name);
+Rabbit.prototype.walk = function() {
+ alert( "прыгает! и ходит: " + this.name );
};
```
diff --git a/1-js/9-prototypes/5-class-inheritance/2-inheritance-error-constructor/solution.md b/1-js/9-prototypes/5-class-inheritance/2-inheritance-error-constructor/solution.md
index 8d0ae759..e81a19bd 100644
--- a/1-js/9-prototypes/5-class-inheritance/2-inheritance-error-constructor/solution.md
+++ b/1-js/9-prototypes/5-class-inheritance/2-inheritance-error-constructor/solution.md
@@ -9,8 +9,8 @@
function Animal(name) {
this.name = name;
- this.walk = function() {
- alert("ходит " + this.name);
+ this.walk = function() {
+ alert( "ходит " + this.name );
};
}
@@ -20,8 +20,8 @@ function Rabbit(name) {
Rabbit.prototype = Object.create(Animal.prototype);
*!*
-Rabbit.prototype.walk = function() {
- alert("прыгает! и ходит: " + this.name);
+Rabbit.prototype.walk = function() {
+ alert( "прыгает! и ходит: " + this.name );
};
*/!*
diff --git a/1-js/9-prototypes/5-class-inheritance/2-inheritance-error-constructor/task.md b/1-js/9-prototypes/5-class-inheritance/2-inheritance-error-constructor/task.md
index b3efa118..90c9588d 100644
--- a/1-js/9-prototypes/5-class-inheritance/2-inheritance-error-constructor/task.md
+++ b/1-js/9-prototypes/5-class-inheritance/2-inheritance-error-constructor/task.md
@@ -9,8 +9,8 @@
function Animal(name) {
this.name = name;
- this.walk = function() {
- alert("ходит " + this.name);
+ this.walk = function() {
+ alert( "ходит " + this.name );
};
}
diff --git a/1-js/9-prototypes/5-class-inheritance/6-constructor-inherited/solution.md b/1-js/9-prototypes/5-class-inheritance/6-constructor-inherited/solution.md
index 34867c20..4339ffe9 100644
--- a/1-js/9-prototypes/5-class-inheritance/6-constructor-inherited/solution.md
+++ b/1-js/9-prototypes/5-class-inheritance/6-constructor-inherited/solution.md
@@ -11,9 +11,9 @@
```js
//+ run
-function Animal() { }
+function Animal() {}
-function Rabbit() { }
+function Rabbit() {}
Rabbit.prototype = Object.create(Animal.prototype);
var rabbit = new Rabbit();
diff --git a/1-js/9-prototypes/5-class-inheritance/6-constructor-inherited/task.md b/1-js/9-prototypes/5-class-inheritance/6-constructor-inherited/task.md
index da6986d3..ea7fde62 100644
--- a/1-js/9-prototypes/5-class-inheritance/6-constructor-inherited/task.md
+++ b/1-js/9-prototypes/5-class-inheritance/6-constructor-inherited/task.md
@@ -7,9 +7,9 @@
Что содержит свойство `rabbit.constructor`? Распознает ли проверка в `alert` объект как `Rabbit`?
```js
-function Animal() { }
+function Animal() {}
-function Rabbit() { }
+function Rabbit() {}
Rabbit.prototype = Object.create(Animal.prototype);
var rabbit = new Rabbit();
diff --git a/1-js/9-prototypes/5-class-inheritance/article.md b/1-js/9-prototypes/5-class-inheritance/article.md
index 3cf4d4d1..f54db40a 100644
--- a/1-js/9-prototypes/5-class-inheritance/article.md
+++ b/1-js/9-prototypes/5-class-inheritance/article.md
@@ -51,12 +51,12 @@ function Animal(name) {
Animal.prototype.run = function(speed) {
this.speed += speed;
- alert(this.name + ' бежит, скорость ' + this.speed);
+ alert( this.name + ' бежит, скорость ' + this.speed );
};
Animal.prototype.stop = function() {
this.speed = 0;
- alert(this.name + ' стоит');
+ alert( this.name + ' стоит' );
};
```
@@ -70,7 +70,7 @@ function Rabbit(name) {
Rabbit.prototype.jump = function() {
this.speed++;
- alert(this.name + ' прыгает');
+ alert( this.name + ' прыгает' );
};
var rabbit = new Rabbit('Кроль');
@@ -92,6 +92,7 @@ Rabbit.prototype.__proto__ = Animal.prototype;
Класс `Animal` остаётся без изменений, а `Rabbit.prototype` мы будем создавать с нужным прототипом, используя `Object.create`:
```js
+//+ no-beautify
function Rabbit(name) {
this.name = name;
this.speed = 0;
@@ -132,12 +133,12 @@ function Animal(name) {
Animal.prototype.stop = function() {
this.speed = 0;
- alert(this.name + ' стоит');
+ alert( this.name + ' стоит' );
}
Animal.prototype.run = function(speed) {
this.speed += speed;
- alert(this.name + ' бежит, скорость ' + this.speed);
+ alert( this.name + ' бежит, скорость ' + this.speed );
};
@@ -154,7 +155,7 @@ Rabbit.prototype.constructor = Rabbit;
// 2.2. Методы Rabbit
Rabbit.prototype.jump = function() {
this.speed++;
- alert(this.name + ' прыгает, скорость ' + this.speed);
+ alert( this.name + ' прыгает, скорость ' + this.speed );
}
```
@@ -235,14 +236,13 @@ Rabbit.prototype.run = function(speed) {
```js
//+ run
-
-Rabbit.prototype.run = function() {
+ Rabbit.prototype.run = function() {
*!*
- // вызвать метод родителя, передав ему текущие аргументы
- Animal.prototype.run.apply(this, arguments);
+ // вызвать метод родителя, передав ему текущие аргументы
+ Animal.prototype.run.apply(this, arguments);
*/!*
- this.jump();
-}
+ this.jump();
+ }
```
Обратите внимание на вызов через `apply` и явное указание контекста.
@@ -320,15 +320,15 @@ Rabbit.prototype = Object.create(Animal.prototype);
Rabbit.prototype.constructor = Rabbit;
// Методы потомка
-Rabbit.prototype.run = function() {
+Rabbit.prototype.run = function() {
// Вызов метода родителя внутри своего
- Animal.prototype.run.apply(this);
- alert(this + " подпрыгивает!");
+ Animal.prototype.run.apply(this);
+ alert( this + " подпрыгивает!" );
};
// Готово, можно создавать объекты
var rabbit = new Rabbit('Кроль');
-rabbit.run();
+rabbit.run();
```
Такое наследование лучше функционального стиля, так как не дублирует методы в каждом объекте.
@@ -341,8 +341,10 @@ rabbit.run();
```js
function Animal() {
- this.walk = function() { alert('walk')};
- alert('Му-у-у!');
+ this.walk = function() {
+ alert('walk')
+ };
+ alert( 'Му-у-у!' );
}
function Rabbit() {
diff --git a/1-js/9-prototypes/6-instanceof/1-strange-instanceof/task.md b/1-js/9-prototypes/6-instanceof/1-strange-instanceof/task.md
index c8638a4c..a3c73f74 100644
--- a/1-js/9-prototypes/6-instanceof/1-strange-instanceof/task.md
+++ b/1-js/9-prototypes/6-instanceof/1-strange-instanceof/task.md
@@ -7,6 +7,7 @@
```js
//+ run
function A() {}
+
function B() {}
A.prototype = B.prototype = {};
@@ -14,7 +15,7 @@ A.prototype = B.prototype = {};
var a = new A();
*!*
-alert(a instanceof B); // true
+alert( a instanceof B ); // true
*/!*
```
diff --git a/1-js/9-prototypes/6-instanceof/2-instanceof-result/solution.md b/1-js/9-prototypes/6-instanceof/2-instanceof-result/solution.md
index 071ec9e2..646e3aa1 100644
--- a/1-js/9-prototypes/6-instanceof/2-instanceof-result/solution.md
+++ b/1-js/9-prototypes/6-instanceof/2-instanceof-result/solution.md
@@ -4,9 +4,9 @@
```js
//+ run
-function Animal() { }
+function Animal() {}
-function Rabbit() { }
+function Rabbit() {}
Rabbit.prototype = Object.create(Animal.prototype);
var rabbit = new Rabbit();
diff --git a/1-js/9-prototypes/6-instanceof/2-instanceof-result/task.md b/1-js/9-prototypes/6-instanceof/2-instanceof-result/task.md
index aa8c4c40..56c971e4 100644
--- a/1-js/9-prototypes/6-instanceof/2-instanceof-result/task.md
+++ b/1-js/9-prototypes/6-instanceof/2-instanceof-result/task.md
@@ -9,9 +9,9 @@
Распознает ли он `rabbit` как `Animal`, `Rabbit` и к тому же `Object`?
```js
-function Animal() { }
+function Animal() {}
-function Rabbit() { }
+function Rabbit() {}
Rabbit.prototype = Object.create(Animal.prototype);
var rabbit = new Rabbit();
diff --git a/1-js/9-prototypes/6-instanceof/article.md b/1-js/9-prototypes/6-instanceof/article.md
index b8d048a8..05407303 100644
--- a/1-js/9-prototypes/6-instanceof/article.md
+++ b/1-js/9-prototypes/6-instanceof/article.md
@@ -12,7 +12,7 @@
```js
//+ run
-function Rabbit() { }
+function Rabbit() {}
*!*
// создаём объект
@@ -21,7 +21,7 @@ var rabbit = new Rabbit();
// проверяем -- этот объект создан Rabbit?
*!*
-alert(rabbit instanceof Rabbit); // true, верно
+alert( rabbit instanceof Rabbit ); // true, верно
*/!*
```
@@ -30,8 +30,8 @@ alert(rabbit instanceof Rabbit); // true, верно
```js
//+ run
var arr = [];
-alert(arr instanceof Array); // true
-alert(arr instanceof Object); // true
+alert( arr instanceof Array ); // true
+alert( arr instanceof Object ); // true
```
Как это часто бывает в JavaScript, здесь есть ряд тонкостей. В некоторых ситуациях, проверка может даже ошибаться!
@@ -55,7 +55,7 @@ alert(arr instanceof Object); // true
```js
//+ run
// Создаём объект rabbit, как обычно
-function Rabbit() { }
+function Rabbit() {}
var rabbit = new Rabbit();
// изменили prototype...
diff --git a/1-js/9-prototypes/7-oop-errors/1-format-error/solution.md b/1-js/9-prototypes/7-oop-errors/1-format-error/solution.md
index 75e08b3e..1532bd3c 100644
--- a/1-js/9-prototypes/7-oop-errors/1-format-error/solution.md
+++ b/1-js/9-prototypes/7-oop-errors/1-format-error/solution.md
@@ -20,9 +20,9 @@ FormatError.prototype.constructor = FormatError;
var err = new FormatError("ошибка форматирования");
-alert(err.message); // ошибка форматирования
-alert(err.name); // FormatError
-alert(err.stack); // стек на момент генерации ошибки
+alert( err.message ); // ошибка форматирования
+alert( err.name ); // FormatError
+alert( err.stack ); // стек на момент генерации ошибки
-alert(err instanceof SyntaxError); // true
+alert( err instanceof SyntaxError ); // true
```
\ No newline at end of file
diff --git a/1-js/9-prototypes/7-oop-errors/1-format-error/task.md b/1-js/9-prototypes/7-oop-errors/1-format-error/task.md
index 26201691..bd78ad35 100644
--- a/1-js/9-prototypes/7-oop-errors/1-format-error/task.md
+++ b/1-js/9-prototypes/7-oop-errors/1-format-error/task.md
@@ -9,9 +9,9 @@
```js
var err = new FormatError("ошибка форматирования");
-alert(err.message); // ошибка форматирования
-alert(err.name); // FormatError
-alert(err.stack); // стек на момент генерации ошибки
+alert( err.message ); // ошибка форматирования
+alert( err.name ); // FormatError
+alert( err.stack ); // стек на момент генерации ошибки
-alert(err instanceof SyntaxError); // true
+alert( err instanceof SyntaxError ); // true
```
diff --git a/1-js/9-prototypes/7-oop-errors/article.md b/1-js/9-prototypes/7-oop-errors/article.md
index e736fc44..f97825e8 100644
--- a/1-js/9-prototypes/7-oop-errors/article.md
+++ b/1-js/9-prototypes/7-oop-errors/article.md
@@ -49,7 +49,7 @@ PropertyError.prototype = Object.create(Error.prototype);
У встроенных объектов `Error` это свойство есть автоматически, вот к примеру:
```js
//+ run
-function f() {
+function f() {
alert( new Error().stack );
}
@@ -109,15 +109,15 @@ PropertyError.prototype = Object.create(Error.prototype);
// Генерация ошибки
*/!*
function readUser(data) {
-
+
var user = JSON.parse(data);
if (!user.age) {
- throw new PropertyError("age");
+ throw new PropertyError("age");
}
if (!user.name) {
- throw new PropertyError("name");
+ throw new PropertyError("name");
}
return user;
@@ -134,13 +134,13 @@ try {
if (err.property == 'name') {
// если в данном месте кода возможны анонимы, то всё нормально
*!*
- alert("Здравствуйте, Аноним!");
+ alert( "Здравствуйте, Аноним!" );
*/!*
} else {
- alert(err.message); // Отсутствует свойство ...
+ alert( err.message ); // Отсутствует свойство ...
}
} else if (err instanceof SyntaxError) {
- alert("Ошибка в данных: " + err.message);
+ alert( "Ошибка в данных: " + err.message );
} else {
throw err; // неизвестная ошибка, не знаю что с ней делать
}
@@ -215,7 +215,7 @@ PropertyRequiredError.prototype.constructor = PropertyRequiredError;
var err = new PropertyRequiredError("age");
// пройдёт проверку
-alert(err instanceof PropertyError); // true
+alert( err instanceof PropertyError ); // true
```
Здесь заодно и `message` было перезаписано на более точное. Если хочется избежать записи и перезаписи, то можно оформить его в виде геттера через `Object.defineProperty`.
diff --git a/10-regular-expressions-javascript/1-regexp-introduction/article.md b/10-regular-expressions-javascript/1-regexp-introduction/article.md
index 4d783bfe..3fb0195a 100644
--- a/10-regular-expressions-javascript/1-regexp-introduction/article.md
+++ b/10-regular-expressions-javascript/1-regexp-introduction/article.md
@@ -18,8 +18,8 @@ var regexp = new RegExp("шаблон", "флаги");
Как правило, используют более короткую запись: шаблон внутри слешей `"/"`:
```js
-var regexp = /шаблон/; // без флагов
-var regexp = /шаблон/gmi; // с флагами gmi (изучим их дальше)
+var regexp = /шаблон/; // без флагов
+var regexp = /шаблон/gmi; // с флагами gmi (изучим их дальше)
```
Слэши `"/"` говорят JavaScript о том, что это регулярное выражение. Они играют здесь ту же роль, что и кавычки для обозначения строк.
@@ -33,8 +33,8 @@ var regexp = /шаблон/gmi; // с флагами gmi (изучим их д
```js
//+ run
var str = "Я люблю JavaScript!"; // будем искать в этой строке
-
-var regexp = /лю/;
+
+var regexp = /лю/;
alert( str.search(regexp) ); // 2
```
@@ -42,9 +42,9 @@ alert( str.search(regexp) ); // 2
```js
//+ run
-var str = "Я люблю JavaScript!";
-
-var substr = "лю";
+var str = "Я люблю JavaScript!";
+
+var substr = "лю";
alert( str.indexOf(substr) ); // 2
```
diff --git a/figures.sketch b/figures.sketch
index d109f706..ec2f20bc 100644
Binary files a/figures.sketch and b/figures.sketch differ