Merge pull request #53 from Romchik/master

Исправление различных мелких ошибок.
This commit is contained in:
Ilya Kantor 2015-06-30 17:17:42 +03:00
commit 8ebc0b769f
21 changed files with 53 additions and 53 deletions

View file

@ -30,7 +30,7 @@
<ul>
<li>При клике на `bug.html` вы перейдёте во вкладку с кодом к месту ошибки, там будет и краткое описание ошибки.
В данном случае ошибка вызвана строкой `lalala`, которая интерпретатору непонятна. </li>
<li>В этом же окошке же вы можете набирать команды на JavaScript, например наберите `alert("Hello")` -- команду вывода сообщения и запустите её нажатием [key Enter]. Мы познакомимся с этой и другими командами далее.</li>
<li>В этом же окошке же вы можете набирать команды на JavaScript. Например, наберите `alert("Hello")` -- команду вывода сообщения и запустите её нажатием [key Enter]. Мы познакомимся с этой и другими командами далее.</li>
<li>Для перевода курсора на следующую строку (если команда состоит из нескольких строк) -- используется сочетание [key Shift+Enter].</li>
</ul>
@ -49,9 +49,9 @@
<img src="firebug-gray.png">
Если иконки не видно -- возможно, у вас выключена панель расширений. Нажмите [key Ctrl+\] для ее показа.
Если иконки не видно -- возможно, у вас выключена панель расширений. Нажмите [key Ctrl+\] для её отображения.
Ну а если ее нет и там, то нажмите [key F12] -- это горячая клавиша для запуска Firebug, расширение появится, если установлено.
Ну а если её нет и там, то нажмите [key F12] -- это горячая клавиша для запуска Firebug, расширение появится, если установлено.
</li>
<li>Далее, для того чтобы консоль заработала, её надо включить.
@ -72,9 +72,9 @@
</li>
</ol>
Как и в Chrome, можно набирать и запускать команды, область для команд на рисунке находится справа, запуск команд осуществляется нажатием [key Ctrl+Enter] (для Mac -- [key Cmd]).
Как и в Chrome, можно набирать и запускать команды. Область для команд на рисунке находится справа, запуск команд осуществляется нажатием [key Ctrl+Enter] (для Mac -- [key Cmd]).
Можно перенести её вниз. нажав на кнопочку <img src="firefox_console_down.png"> -- на рисунке она не видна, но есть справа-снизу панели разработки.
Можно перенести её вниз, нажав на кнопочку <img src="firefox_console_down.png"> (на рисунке её не видно, но она присутствует в правом нижнем углу панели разработки).
Об основных возможностях можно прочитать на сайте <a href="http://firebug.ru">firebug.ru</a>.

View file

@ -4,6 +4,6 @@
Сделайте страницу, которая выводит "Я - JavaScript!".
Создайте ее на диске, откройте в браузере, убедитесь, что все работает.
Создайте её на диске, откройте в браузере, убедитесь, что всё работает.
[demo src="solution"]

View file

@ -5,7 +5,7 @@
## Тег SCRIPT
[smart header="А побыстрее?"]
В том (и только в том!) случае, если читатель нетерпелив и уже разрабатывал на JavaScript или имеет достаточно опыта в другом программировании, он может не читать каждую статью этого раздела, а прыгнуть сразу на главу [](/javascript-specials). Там будет кратко самое основное.
В том (и только в том!) случае, если читатель нетерпелив и уже разрабатывал на JavaScript или имеет достаточно опыта в другом языке программировании, он может не читать каждую статью этого раздела, а перепрыгнуть сразу к главе [](/javascript-specials). Там будет кратко самое основное.
Если же у вас есть достаточно времени и желание начать с азов, то читайте дальше :)
[/smart]

View file

@ -11,14 +11,14 @@
alert(сообщение)
```
`alert` выводит на экран окно с сообщением и приостанавливает выполнение скрипта, пока пользователь не нажмет "ОК".
`alert` выводит на экран окно с сообщением и приостанавливает выполнение скрипта, пока пользователь не нажмёт "ОК".
```js
//+ run
alert( "Привет" );
```
Окно сообщения, которое выводится, является *модальным окном*. Слово "модальное" означает, что посетитель не может взаимодействовать со страницей, нажимать другие кнопки и т.п., пока не разберется с окном. В данном случае - пока не нажмет на "OK".
Окно сообщения, которое выводится, является *модальным окном*. Слово "модальное" означает, что посетитель не может взаимодействовать со страницей, нажимать другие кнопки и т.п., пока не разберётся с окном. В данном случае - пока не нажмёт на "OK".
## prompt
@ -33,7 +33,7 @@ result = prompt(title, default);
Пользователь должен либо что-то ввести и нажать OK, либо отменить ввод кликом на CANCEL или нажатием [key Esc] на клавиатуре.
**Вызов `prompt` возвращает то, что ввел посетитель -- строку или специальное значение `null`, если ввод отменен.**
**Вызов `prompt` возвращает то, что ввёл посетитель -- строку или специальное значение `null`, если ввод отменён.**
[warn header="Safari 5.1+ не возвращает `null`"]
Единственный браузер, который не возвращает `null` при отмене ввода -- это Safari. При отсутствии ввода он возвращает пустую строку. Предположительно, это ошибка в браузере.
@ -53,7 +53,7 @@ alert('Вам ' + years + ' лет!')
[warn header="Всегда указывайте `default`"]
Второй параметр может отсутствовать. Однако при этом IE вставит в диалог значение по умолчанию `"undefined"`.
Запустите этот код <u>в IE</u>, чтобы понять о чем речь:
Запустите этот код <u>в IE</u>, чтобы понять о чём речь:
```js
//+ run
@ -106,6 +106,6 @@ alert( isAdmin );
<ul>
<li>`alert` выводит сообщение.</li>
<li>`prompt` выводит сообщение и ждет, пока пользователь введет текст, а затем возвращает введенное значение или `null`, если ввод отменен (CANCEL/[key Esc]).</li>
<li>`confirm` выводит сообщение и ждет, пока пользователь нажмет "OK" или "CANCEL" и возвращает `true/false`.</li>
</ul>
<li>`prompt` выводит сообщение и ждёт, пока пользователь введёт текст, а затем возвращает введённое значение или `null`, если ввод отменён (CANCEL/[key Esc]).</li>
<li>`confirm` выводит сообщение и ждёт, пока пользователь нажмёт "OK" или "CANCEL" и возвращает `true/false`.</li>
</ul>

View file

@ -272,7 +272,7 @@ alert( !true ); // false
alert( !0 ); // true
```
**В частности, двойное НЕ используются для преобразования значений к логическому типу:**
**В частности, двойное НЕ используют для преобразования значений к логическому типу:**
```js
//+ run

View file

@ -2,10 +2,10 @@
[importance 5]
Напишите цикл, который предлагает `prompt` ввести число, большее `100`. Если посетитель ввел другое число -- попросить ввести еще раз, и так далее.
Напишите цикл, который предлагает `prompt` ввести число, большее `100`. Если посетитель ввёл другое число -- попросить ввести ещё раз, и так далее.
Цикл должен спрашивать число пока либо посетитель не введет число, большее `100`, либо не нажмет кнопку Cancel (ESC).
Цикл должен спрашивать число пока либо посетитель не введёт число, большее `100`, либо не нажмёт кнопку Cancel (ESC).
Предполагается, что посетитель вводит только числа, предусматривать обработку нечисловых строк в этой задаче необязательно.
Предполагается, что посетитель вводит только числа. Предусматривать обработку нечисловых строк в этой задаче необязательно.
[demo /]

View file

@ -119,7 +119,7 @@ for (i = 0; i < 3; i++) {
<li>Идти на шаг 2.</li>
</ol>
Иными, словами, поток выполнения: `начало` -> (если `условие` -> `тело` -> `шаг`) -> (если `условие` -> `тело` -> `шаг`) -> ... и так далее, пока верно `условие`.
Иными словами, поток выполнения: `начало` -> (если `условие` -> `тело` -> `шаг`) -> (если `условие` -> `тело` -> `шаг`) -> ... и так далее, пока верно `условие`.
[smart]
В цикле также можно определить переменную:
@ -161,7 +161,7 @@ for (; i < 3;) {
}
```
А можно и вообще убрать все, получив бесконечный цикл:
А можно и вообще убрать всё, получив бесконечный цикл:
```js
for (;;) {
@ -213,7 +213,7 @@ alert( 'Сумма: ' + sum );
Её используют, если понятно, что на текущем повторе цикла делать больше нечего.
Например, цикл ниже использует `continue`, чтобы не выводить четные значения:
Например, цикл ниже использует `continue`, чтобы не выводить чётные значения:
```js
//+ run no-beautify
@ -225,7 +225,7 @@ for (var i = 0; i < 10; i++) {
}
```
Для четных `i` срабатывает `continue`, выполнение тела прекращается и управление передается на следующий проход `for`.
Для чётных `i` срабатывает `continue`, выполнение тела прекращается и управление передаётся на следующий проход `for`.
[smart header="Директива `continue` позволяет обойтись без скобок"]
@ -313,7 +313,7 @@ alert('Готово!');
outer: for (var i = 0; i < 3; i++) { ... }
```
Можно также выносить ее на отдельную строку:
Можно также выносить её на отдельную строку:
```js
//+ no-beautify
@ -342,7 +342,7 @@ JavaScript поддерживает три вида циклов:
Обе этих директивы поддерживают "метки", которые ставятся перед циклом. Метки -- единственный способ для `break/continue` повлиять на выполнение внешнего цикла.
Заметим, что метки не позволяют прыгнуть на произвольное место кода, в JavaScript нет такой возможности.
Заметим, что метки не позволяют прыгнуть в произвольное место кода, в JavaScript нет такой возможности.

View file

@ -3,7 +3,7 @@
[importance 4]
Следующая функция возвращает `true`, если параметр `age` больше `18`.
В ином случае она задает вопрос посредством вызова `confirm` и возвращает его результат.
В ином случае она задаёт вопрос посредством вызова `confirm` и возвращает его результат.
```js
function checkAge(age) {
@ -32,4 +32,4 @@ function checkAge(age) {
}
```
Есть ли хоть одно отличие в поведении этого варианта?
Есть ли хоть одно отличие в поведении этого варианта?

View file

@ -3,7 +3,7 @@
[importance 4]
Следующая функция возвращает `true`, если параметр `age` больше `18`.
В ином случае она задает вопрос `confirm` и возвращает его результат.
В ином случае она задаёт вопрос `confirm` и возвращает его результат.
```js
function checkAge(age) {

View file

@ -2,7 +2,7 @@
Зачастую нам надо повторять одно и то же действие во многих частях программы.
Например, красиво вывести сообщение необходимо при приветствии посетителя, при выходе посетителя с сайта, еще где-нибудь.
Например, красиво вывести сообщение необходимо при приветствии посетителя, при выходе посетителя с сайта, ещё где-нибудь.
Чтобы не повторять один и тот же код во многих местах, придуманы функции. Функции являются основными "строительными блоками" программы.
[cut]
@ -285,7 +285,7 @@ alert(test); // 20
**Для возврата значения используется директива `return`.**
Она может находиться в любом месте функции. Как только до нее доходит управление -- функция завершается и значение передается обратно.
Она может находиться в любом месте функции. Как только до неё доходит управление -- функция завершается и значение передается обратно.
Вызовов `return` может быть и несколько, например:

View file

@ -22,4 +22,4 @@ function factorial(n) {
alert( factorial(5) ); // 120
```
В этом случае вызов `factorial(1)` сведется к `1*factorial(0)`, будет дополнительный шаг рекурсии.
В этом случае вызов `factorial(1)` сведётся к `1*factorial(0)`, будет дополнительный шаг рекурсии.

View file

@ -26,4 +26,4 @@ n! = n * (n - 1) * (n - 2) * ...*1
alert( factorial(5) ); // 120
```
Подсказка: обратите внимание, что `n!` можно записать как `n * (n-1)!`, например `3! = 3*2! = 3*2*1! = 6`
Подсказка: обратите внимание, что `n!` можно записать как `n * (n-1)!`. Например: `3! = 3*2! = 3*2*1! = 6`

View file

@ -15,7 +15,7 @@ alert( fib(7) ); // 13
При больших значениях `n` оно будет работать очень медленно. Например, `fib(77)` уже будет вычисляться очень долго.
Это потому, что функция порождает обширное дерево вложенных вызовов. При этом ряд значений вычисляются много раз. Например, посмотрим на отрывок вычислений:
Это потому, что функция порождает обширное дерево вложенных вызовов. При этом ряд значений вычисляется много раз. Например, посмотрим на отрывок вычислений:
```js
//+ no-beautify
@ -53,20 +53,20 @@ a b c
a = b, b = c;
c = a + b;
/* стало так (еще число):
/* стало так (ещё число):
a b c
1, 1, 2, 3
*/
```
Следующий шаг даст нам еще одно число последовательности:
Следующий шаг даст нам ещё одно число последовательности:
```js
//+ no-beautify
a = b, b = c;
c = a + b;
/* стало так (еще число):
/* стало так (ещё число):
a b c
1, 1, 2, 3, 5
*/
@ -96,4 +96,4 @@ alert( fib(7) ); // 13
alert( fib(77) ); // 5527939700884757
```
Цикл здесь начинается с `i=3`, так как первое и второе числа Фибоначчи заранее записаны в переменные `a=1`, `b=1`.
Цикл здесь начинается с `i=3`, так как первое и второе числа Фибоначчи заранее записаны в переменные `a=1`, `b=1`.

View file

@ -63,7 +63,7 @@ alert( pow(2, 3) ); // 8
Максимальная глубина рекурсии в браузерах ограничена, точно можно рассчитывать на `10000` вложенных вызовов, но некоторые интерпретаторы допускают и больше.
Итак, рекурсию используют, когда вычисление функции можно свести к её более простому вызову, а его -- еще к более простому, и так далее, пока значение не станет очевидно.
Итак, рекурсию используют, когда вычисление функции можно свести к её более простому вызову, а его -- ещё к более простому, и так далее, пока значение не станет очевидно.
## Контекст выполнения, стек
@ -240,4 +240,4 @@ function pow(x, n) {
font-weight: bold;
}
</style>
[/head]
[/head]

View file

@ -16,7 +16,7 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.2.0/lodash.js"></script>
```
Вы также можете использовать путь относительно текущей страницы, например `src="lodash.js"` обозначает файл из текущей директории.
Вы также можете использовать путь относительно текущей страницы. Например, `src="lodash.js"` обозначает файл из текущей директории.
Чтобы подключить несколько скриптов, используйте несколько тегов:
@ -136,7 +136,7 @@
Можно поставить все подобные скрипты в конец страницы -- это уменьшит проблему, но не избавит от неё полностью, если скриптов несколько. Допустим, в конце страницы 3 скрипта, и первый из них тормозит -- получается, другие два его будут ждать -- тоже нехорошо.
Кроме того, браузер дойдёт до скриптов, расположенных в конце страницы, начнут грузиться только тогда, когда вся страница загрузится. А это не всегда правильно, например счётчик посещений наиболее точно сработает, если загрузить его пораньше.
Кроме того, браузер дойдёт до скриптов, расположенных в конце страницы, они начнут грузиться только тогда, когда вся страница загрузится. А это не всегда правильно. Например, счётчик посещений наиболее точно сработает, если загрузить его пораньше.
Поэтому "расположить скрипты внизу" -- не лучший выход.
@ -205,7 +205,7 @@
При запуске вы увидите, что вся страница отобразилась тут же, а `alert` из внешнего скрипта появится позже, когда загрузится скрипт.
[smart header="Эти атрибуты давно \"в ходу\""]
Большинство современных системы рекламы и счётчиков знают про эти атрибуты и используют их.
Большинство современных систем рекламы и счётчиков знают про эти атрибуты и используют их.
Перед вставкой внешнего тега `<script>` понимающий программист всегда проверит, есть ли у него подобный атрибут. Иначе медленный скрипт может задержать загрузку страницы.
[/smart]
@ -246,6 +246,6 @@ addScript('3.js'); // но, гарантированно, в порядке 1 ->
Очень важно не только читать учебник, но делать что-то самостоятельно.
Решите задачки, чтобы удостовериться, что вы все правильно поняли.
Решите задачки, чтобы удостовериться, что вы всё правильно поняли.

View file

@ -109,7 +109,7 @@ alert( g(5) ); // 120, работает!
Как мы говорили выше, в браузере IE до 9 версии имя NFE видно везде, что является ошибкой с точки зрения стандарта.
...Но на самом деле ситуация еще забавнее. Старый IE создаёт в таких случаях целых две функции: одна записывается в переменную `f`, а вторая -- в переменную `factorial`.
...Но на самом деле ситуация ещё забавнее. Старый IE создаёт в таких случаях целых две функции: одна записывается в переменную `f`, а вторая -- в переменную `factorial`.
Например:

View file

@ -4,7 +4,7 @@
Она будет особенно полезна, если ранее вы программировали на другом языке, ну или как повторение важных моментов раздела.
Все очень компактно, со ссылками на развёрнутые описания.
Всё очень компактно, со ссылками на развёрнутые описания.
[cut]

View file

@ -89,7 +89,7 @@ alert( "Сейчас будет ошибка" );
Со временем программа становится большой и сложной. Появляется необходимость добавить *комментарии*, которые объясняют, что происходит и почему.
Комментарии могут находиться в любом месте программы и никак не влияют на ее выполнение. Интерпретатор JavaScript попросту игнорирует их.
Комментарии могут находиться в любом месте программы и никак не влияют на её выполнение. Интерпретатор JavaScript попросту игнорирует их.
*Однострочные комментарии* начинаются с двойного слэша `//`. Текст считается комментарием до конца строки:
@ -112,7 +112,7 @@ alert( 'Привет' );
alert( 'Мир' );
```
Все содержимое комментария игнорируется. Если поместить код внутрь <code>/&#42; ... &#42;/</code> или после `//` -- он не выполнится.
Всё содержимое комментария игнорируется. Если поместить код внутрь <code>/&#42; ... &#42;/</code> или после `//` -- он не выполнится.
```js
//+ run

View file

@ -48,7 +48,7 @@ var user = 'John', age = 25, message = 'Hello';
### Аналогия из жизни
Проще всего понять переменную, если представить ее как "коробку" для данных, с уникальным именем.
Проще всего понять переменную, если представить её как "коробку" для данных, с уникальным именем.
Например, переменная `message` -- это коробка, в которой хранится значение `"Hello!"`:
@ -131,7 +131,7 @@ var my-name; // дефис '-' не является разрешенным си
```
[smart header="Регистр букв имеет значение"]
Переменные `apple` и `AppLE` - две разные переменные.
Переменные `apple` и `AppLE` -- две разные переменные.
[/smart]
[smart header="Русские буквы допустимы, но не рекомендуются"]
@ -213,7 +213,7 @@ num = 5; // ошибки не будет, так как строгий режи
Это потому, что переменная `test` не объявлена через `var` и совпадает с `id` элемента `<div>`. Даже не спрашивайте почему -- это ошибка в браузере IE до версии 9.
Самое "забавное" -- то, что такая ошибка присвоения значений будет только в IE8- и только если на странице присутствует элемент с совпадающим с именем `id`.
Самое "забавное" то, что такая ошибка присвоения значений будет только в IE8- и только если на странице присутствует элемент с совпадающим с именем `id`.
Такие ошибки особенно "весело" исправлять и отлаживать.

View file

@ -80,7 +80,7 @@ var age = null;
Значение `undefined`, как и `null`, образует свой собственный тип, состоящий из одного этого значения. Оно имеет смысл "значение не присвоено".
Если переменная объявлена, но в неё ничего не записано, то ее значение как раз и есть `undefined`:
Если переменная объявлена, но в неё ничего не записано, то её значение как раз и есть `undefined`:
```js
//+ run
@ -165,4 +165,4 @@ typeof function(){} // "function" (2)
Очень скоро мы изучим их во всех деталях.
Оператор `typeof x` позволяет выяснить, какой тип находится в `x`, возвращая его в виде строки.
Оператор `typeof x` позволяет выяснить, какой тип находится в `x`, возвращая его в виде строки.

View file

@ -4,7 +4,7 @@
Несколько операторов мы знаем со школы -- это обычные сложение `+`, умножение `*`, вычитание и так далее.
В этой главе мы сконцентрируемся на операторах, которые в курсе математике не проходят, и на их особенностях в JavaScript.
В этой главе мы сконцентрируемся на операторах, которые в курсе математики не проходят, и на их особенностях в JavaScript.
[cut]
## Термины: "унарный", "бинарный", "операнд"
@ -425,4 +425,4 @@ for (*!*a = 1, b = 3, c = a*b*/!*; a < 10; a++) {
}
```
Такие трюки используются во многих JavaScript-фреймворках для укорачивания кода.
Такие трюки используются во многих JavaScript-фреймворках для укорачивания кода.