Skip to content

Commit

Permalink
Second round of corrections
Browse files Browse the repository at this point in the history
  • Loading branch information
Zulcom committed Oct 4, 2020
1 parent aa26224 commit b526fea
Show file tree
Hide file tree
Showing 14 changed files with 17 additions and 17 deletions.
2 changes: 1 addition & 1 deletion 1-js/02-first-steps/05-types/article.md
Expand Up @@ -115,7 +115,7 @@ alert( `Привет, *!*${name}*/!*!` ); // Привет, Иван!
alert( `результат: *!*${1 + 2}*/!*` ); // результат: 3
```

Выражение внутри `${…}` вычисляется, и его результат становится частью строки. Мы можем положить туда всё что угодно: переменную `name`, или выражение `1 + 2`, или что-то более сложное.
Выражение внутри `${…}` вычисляется, и его результат становится частью строки. Мы можем положить туда всё, что угодно: переменную `name`, или выражение `1 + 2`, или что-то более сложное.

Обратите внимание, что это можно делать только в обратных кавычках. Другие кавычки не имеют такой функциональности встраивания!
```js run
Expand Down
2 changes: 1 addition & 1 deletion 1-js/03-code-quality/04-ninja-code/article.md
Expand Up @@ -231,7 +231,7 @@ function render() {

## Итого

Все советы выше пришли из реального кода… И, в том числе, от разработчиков с большим опытом. Возможно, даже больше вашего, так что не судите опрометчиво ;)
Все советы выше пришли из реального кода… И в том числе, от разработчиков с большим опытом. Возможно, даже больше вашего, так что не судите опрометчиво ;)

- Следуйте нескольким из них – и ваш код станет полон сюрпризов.
- Следуйте многим – и ваш код станет истинно вашим, никто не захочет изменять его.
Expand Down
2 changes: 1 addition & 1 deletion 1-js/05-data-types/05-array-methods/article.md
Expand Up @@ -642,7 +642,7 @@ alert(Array.isArray([])); // true

## Большинство методов поддерживают "thisArg"

Почти все методы массива, которые вызывают функции -- такие, как `find`, `filter`, `map`, за исключением метода `sort`, принимают необязательный параметр `thisArg`.
Почти все методы массива, которые вызывают функции -- такие как `find`, `filter`, `map`, за исключением метода `sort`, принимают необязательный параметр `thisArg`.

Этот параметр не объяснялся выше, так как очень редко используется, но для наиболее полного понимания темы мы обязаны его рассмотреть.

Expand Down
2 changes: 1 addition & 1 deletion 1-js/06-advanced-functions/03-closure/article.md
Expand Up @@ -472,7 +472,7 @@ alert(message); // Ошибка: переменная message не опреде

Так что программистам пришлось что-то придумать. И то, что они сделали, называется "immediately-invoked function expressions" (аббревиатура IIFE), что означает функцию, запускаемую сразу после объявления.

Это не то что мы должны использовать сегодня, но, так как вы можете встретить это в старых скриптах, полезно понимать принцип работы.
Это не то, что мы должны использовать сегодня, но, так как вы можете встретить это в старых скриптах, полезно понимать принцип работы.

IIFE выглядит так:

Expand Down
2 changes: 1 addition & 1 deletion 1-js/06-advanced-functions/07-new-function/article.md
Expand Up @@ -82,7 +82,7 @@ getFunc()(); // *!*"test"*/!*, из лексического окружения

Эта особенность `new Function` выглядит странно, но оказывается очень полезной на практике.

Представьте что нужно создать функцию из строки. Код этой функции неизвестен во время написания скрипта (поэтому не используем обычные функции), а будет определён только в процессе выполнения. Мы можем получить код с сервера или с другого ресурса.
Представьте, что нужно создать функцию из строки. Код этой функции неизвестен во время написания скрипта (поэтому не используем обычные функции), а будет определён только в процессе выполнения. Мы можем получить код с сервера или с другого ресурса.

Наша новая функция должна взаимодействовать с основным скриптом.

Expand Down
2 changes: 1 addition & 1 deletion 20-css-for-js/18-css-format/article.md
Expand Up @@ -133,7 +133,7 @@ box-shadow:0 0 100px 20px #000;
}
```

CSS-препроцессоры, такие, как [SASS](http://sass-lang.com/), [LESS](http://lesscss.org/), [Stylus](http://learnboost.github.com/stylus/), [Autoprefixer](https://github.com/postcss/autoprefixer) делают написание CSS сильно удобнее.
CSS-препроцессоры, такие как [SASS](http://sass-lang.com/), [LESS](http://lesscss.org/), [Stylus](http://learnboost.github.com/stylus/), [Autoprefixer](https://github.com/postcss/autoprefixer) делают написание CSS сильно удобнее.

Выберите один из них и используйте. Единственно, они добавляют дополнительную предобработку CSS, которую нужно учесть, и желательно, на сервере.

2 changes: 1 addition & 1 deletion 3-frames-and-windows/01-popup-windows/article.md
Expand Up @@ -265,7 +265,7 @@ window.onblur = () => window.focus();
- По умолчанию браузеры блокируют вызовы `open`, выполненные не в результате действий пользователя. Обычно браузеры показывают предупреждение, так что пользователь все-таки может разрешить вызов этого метода.
- Вместо попапа открывается вкладка, если в вызове `open` не указаны его размеры.
- У попапа есть доступ к породившему его окну через свойство `window.opener`.
- Если основное окно и попап имеют один домен и протокол, то они свободно могут читать и изменять друг друга. В противном случае они могут только изменять положение друг друга и взаимодействовать [с помощью сообщений](info:cross-window-communication).
- Если основное окно и попап имеют один домен и протокол, то они свободно могут читать и изменять друг друга. В противном случае, они могут только изменять положение друг друга и взаимодействовать [с помощью сообщений](info:cross-window-communication).

Чтобы закрыть попап: метод `close()`. Также попап может закрыть и пользователь (как и любое другое окно). После закрытия окна свойство `window.closed` имеет значение `true`.

Expand Down
4 changes: 2 additions & 2 deletions 3-frames-and-windows/03-cross-window-communication/article.md
Expand Up @@ -83,7 +83,7 @@
- Получения ссылки на внутренний объект `window` из `iframe.contentWindow`
- Изменения `location`.

С другой стороны, если у ифрейма тот же источник, то с ним можно делать всё что угодно:
С другой стороны, если у ифрейма тот же источник, то с ним можно делать всё, что угодно:

```html run
<!-- ифрейм с того же сайта -->
Expand Down Expand Up @@ -350,7 +350,7 @@ window.addEventListener("message", function(event) {
- `window.parent`, `window.top` -- это ссылки на родительское окно и окно самого верхнего уровня,
- `iframe.contentWindow` -- это объект `window` внутри тега `<iframe>`.

Если окна имеют одинаковый источник (протокол, домен, порт), то они могут делать друг с другом всё что угодно.
Если окна имеют одинаковый источник (протокол, домен, порт), то они могут делать друг с другом всё, что угодно.

В противном случае возможны только следующие действия:
- Изменение свойства location другого окна (доступ только на запись).
Expand Down
2 changes: 1 addition & 1 deletion 5-network/07-url/article.md
Expand Up @@ -188,7 +188,7 @@ alert(url); // https://google.com/search?q=Rock&Roll

Как видим, функция `encodeURI` не закодировала символ `&`, который является разрешённым в составе полного URL-адреса.

Но внутри параметра поиска символ `&` должен быть закодирован, в противном случае мы получим `q=Rock&Roll`, что значит `q=Rock` плюс непонятный параметр `Roll`. Не то что предполагалось.
Но внутри параметра поиска символ `&` должен быть закодирован, в противном случае мы получим `q=Rock&Roll`, что значит `q=Rock` плюс непонятный параметр `Roll`. Не то, что предполагалось.

Чтобы правильно вставить параметр поиска в строку URL, мы должны использовать для него только `encodeURIComponent`. Наиболее безопасно кодировать и имя, и значение, за исключением случаев, когда мы абсолютно уверены в том, что они содержат только разрешённые символы.

Expand Down
2 changes: 1 addition & 1 deletion 5-network/08-xmlhttprequest/article.md
Expand Up @@ -9,7 +9,7 @@
В современной веб-разработке `XMLHttpRequest` используется по трём причинам:

1. По историческим причинам: существует много кода, использующего `XMLHttpRequest`, который нужно поддерживать.
2. Необходимость поддерживать старые браузеры, и нежелание использовать полифилы (например, чтобы уменьшить количество кода).
2. Необходимость поддерживать старые браузеры и нежелание использовать полифилы (например, чтобы уменьшить количество кода).
3. Потребность в функциональности, которую `fetch` пока что не может предоставить, к примеру, отслеживание прогресса отправки на сервер.

Что-то из этого списка звучит знакомо? Если да, тогда вперёд, приятного знакомства с `XMLHttpRequest`. Если же нет, возможно, имеет смысл изучать сразу <info:fetch>.
Expand Down
4 changes: 2 additions & 2 deletions 8-web-components/2-custom-elements/article.md
Expand Up @@ -266,7 +266,7 @@ customElements.define('user-info', class extends HTMLElement {
*/!*
```

Теперь `alert` в строке `(*)` показывает "Джон", поскольку мы запускаем его асинхронно, после завершения парсинга HTML. Мы можем обработать дочерние элементы при необходимости, и завершить инициализацию.
Теперь `alert` в строке `(*)` показывает "Джон", поскольку мы запускаем его асинхронно, после завершения парсинга HTML. Мы можем обработать дочерние элементы при необходимости и завершить инициализацию.

С другой стороны, это решение также не идеально. Если вложенные пользовательские элементы тоже используют `setTimeout` для инициализации, то они встают в очередь: первым запускается внешний `setTimeout`, а затем внутренний.

Expand Down Expand Up @@ -304,7 +304,7 @@ customElements.define('user-info', class extends HTMLElement {

## Модифицированные встроенные элементы

Новые элементы, которые мы создаём, такие, как `<time-formatted>`, не имеют связанной с ними семантики. Они не известны поисковым системам, а устройства для людей с ограниченными возможностями не могут справиться с ними.
Новые элементы, которые мы создаём, такие как `<time-formatted>`, не имеют связанной с ними семантики. Они не известны поисковым системам, а устройства для людей с ограниченными возможностями не могут справиться с ними.

Но такие вещи могут быть важны. Например, поисковой системе было бы интересно узнать, что мы показываем именно время. А если мы делаем специальный вид кнопки, почему не использовать существующую функциональность `<button>`?

Expand Down
2 changes: 1 addition & 1 deletion 9-regular-expressions/06-regexp-boundary/article.md
Expand Up @@ -38,7 +38,7 @@ alert( "Hello, Java!".match(/\bJava!\b/) ); // null (нет совпадения

Мы можем использовать `pattern:\b` не только со словами, но и с цифрами.

Например, регулярное выражение `pattern:\b\d\d\b` ищет отдельно стоящие двузначные числа. Другими словами, оно требует, чтобы и до и после `pattern:\d\d` были символы, отличные от `pattern:\w`, такие, как пробелы или пунктуация (или начало/конец текста).
Например, регулярное выражение `pattern:\b\d\d\b` ищет отдельно стоящие двузначные числа. Другими словами, оно требует, чтобы и до и после `pattern:\d\d` были символы, отличные от `pattern:\w`, такие как пробелы или пунктуация (или начало/конец текста).

```js run
alert( "1 23 456 78".match(/\b\d\d\b/g) ); // 23,78
Expand Down
4 changes: 2 additions & 2 deletions 9-regular-expressions/10-regexp-greedy-and-lazy/article.md
Expand Up @@ -86,7 +86,7 @@ alert( str.match(regexp) ); // "witch" and her "broom"

8. Так что первое совпадение: `match:"witch" and her "broom"`. Если у регулярного выражения стоит флаг `pattern:g`, то поиск продолжится с того места, где закончился предыдущий. В оставшейся строке `subject:is one` нет кавычек, так что совпадений больше не будет.

Это, определённо, не то что мы ожидали. Но так оно работает.
Это, определённо, не то, что мы ожидали. Но так оно работает.

**В жадном режиме (по умолчанию) квантификатор повторяется столько раз, сколько это возможно.**

Expand Down Expand Up @@ -236,7 +236,7 @@ let regexp = /<a href=".*?" class="doc">/g;
alert( str.match(regexp) ); // <a href="link1" class="doc">, <a href="link2" class="doc">
```

Теперь, кажется, что всё работает правильно. У нас есть два совпадения:
Теперь кажется, что всё работает правильно. У нас есть два совпадения:

```html
<a href="....." class="doc"> <a href="....." class="doc">
Expand Down
2 changes: 1 addition & 1 deletion 9-regular-expressions/17-regexp-methods/article.md
Expand Up @@ -233,7 +233,7 @@ let result = str.replace(/(?<name>\w+) (?<surname>\w+)/, (...match) => {
alert(result); // Smith, John
```
Использование функции даёт нам максимальные возможности по замене, потому что функция получает всю информацию о совпадении, имеет доступ к внешним переменным и может делать всё что угодно.
Использование функции даёт нам максимальные возможности по замене, потому что функция получает всю информацию о совпадении, имеет доступ к внешним переменным и может делать всё, что угодно.
## regexp.exec(str)
Expand Down

0 comments on commit b526fea

Please sign in to comment.