You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Теперь представим себе, что во время первого бенчмаркинга `bench(walkIn)` компьютер что-то делал параллельно важное (вдруг) и это занимало ресурсы, а во время второго -- перестал. Реальная ситуация? Конечно реальна, особенно на современных ОС, где много процессов одновременно.
283
283
284
-
**Гораздо более надёжные результаты можно получить, весь пакет тестов прогнать много раз.**
284
+
**Гораздо более надёжные результаты можно получить, если весь пакет тестов прогнать много раз.**
Copy file name to clipboardExpand all lines: 1-js/4-data-structures/5-object-for-in/article.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -166,6 +166,6 @@ for (var code in codes) {
166
166
<ul>
167
167
<li>Цикл по ключам: `for (key in obj)`.</li>
168
168
<li>Порядок перебора соответствует порядку объявления для нечисловых ключей, а числовые -- сортируются (в современных браузерах).</li>
169
-
<li>Для того, чтобы гарантировать перебор ключей в нужном порядке, их делают "нечисловыми", например добавляя в начало `+`, а потом, в процессе обработки, преобразуют ключи в числа.</li>
169
+
<li>Если нужно, чтобы порядок перебора числовых ключей соответствовал их объявлению в объекте, то используют трюк: числовые ключи заменяют на похожие, но содержащие не только цифры. Например, добавляют в начало `+`, как описано в примере выше, а потом, в процессе обработки, преобразуют такие ключи в числа.</li>
Наилучшая техника для выбора уникальных строк -- использование вспомогательного объекта. Ведь название свойства в объекте, с одной стороны -- строка, а с другой -- всегда уникально. Повторная запись в свойство с тем же именем перезапишет его.
54
+
Наилучшая техника для выбора уникальных строк -- использование вспомогательного объекта`obj`. Ведь название свойства в объекте, с одной стороны -- строка, а с другой -- всегда уникально. Повторная запись в свойство с тем же именем перезапишет его.
56
55
57
56
Например, если `"харе"` попало в объект один раз (`obj["харе"] = true`), то второе такое же присваивание ничего не изменит.
<dd>Удалить `deleteCount` элементов, начиная с номера `index`, а затем вставить `elem1, ..., elemN` на их место.</dd>
102
+
<dd>Удалить `deleteCount` элементов, начиная с номера `index`, а затем вставить `elem1, ..., elemN` на их место. Возвращает массив из удалённых элементов.</dd>
103
103
</dl>
104
104
105
-
Посмотрим примеры.
105
+
Этот метод проще всего понять, рассмотрев примеры.
106
+
107
+
Начнём с удаления:
106
108
107
109
```js
108
110
//+ run
@@ -115,20 +117,7 @@ arr.splice(1, 1); // начиная с позиции 1, удалить 1 эле
115
117
alert( arr ); // осталось ["Я", "JavaScript"]
116
118
```
117
119
118
-
Ниже продемонстрировано, как использовать `splice` для удаления одного элемента. Следующие за удаленным элементы сдвигаются, чтобы заполнить его место.
119
-
120
-
```js
121
-
//+ run
122
-
var arr = ["Я", "изучаю", "JavaScript"];
123
-
124
-
*!*
125
-
arr.splice(0, 1); // удалить 1 элемент, начиная с позиции 0
126
-
*/!*
127
-
128
-
alert( arr[0] ); // "изучаю" стал первым элементом
129
-
```
130
-
131
-
Следующий пример показывает, как *заменять элементы*:
120
+
В следующем примере мы удалим 3 элемента и вставим другие на их место:
Copy file name to clipboardExpand all lines: 1-js/5-functions-closures/2-closures/article.md
+3-4Lines changed: 3 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -63,7 +63,7 @@ sayHi('Вася');
63
63
```
64
64
65
65
</li>
66
-
<li>В конце выполнения функции объект с переменными обычно выбрасывается и память очищается.</li>
66
+
<li>В конце выполнения функции объект с переменными обычно выбрасывается и память очищается. В примерах выше так и происходит. Через некоторое время мы рассмотрим более сложные ситуации, при которых объект с переменными сохраняется и после завершения функции.</li>
На момент первого запуска `(*)`, переменная `phrase` имела значение `'Привет'`, а ко второму `(**)` изменила его на `'Пока'`.
146
146
147
-
Это естественно, ведь для доступа к внешним переменным функция хранит ссылку `[[Scope]]` на весь внешний объект с ними, а не на каждое его свойство (переменную) по отдельности.
148
-
147
+
Это естественно, ведь для доступа к внешней переменной функция по ссылке `[[Scope]]` обращается во внешний объект переменных и берёт то значение, которое там есть на момент обращения.
149
148
150
149
## Вложенные функции
151
150
@@ -182,7 +181,7 @@ getFullName.[[Scope]] = объект переменных текущего за
182
181
183
182
Благодаря этому `getFullName()` получает снаружи `firstName` и `lastName`.
184
183
185
-
Заметим, что если переменная не найдена во внешнем объекте переменных, то она ищется ещё более внешнем (через `[[Scope]]` внешней функции), то есть, такой пример тоже будет работать:
184
+
Заметим, что если переменная не найдена во внешнем объекте переменных, то она ищется в ещё более внешнем (через `[[Scope]]` внешней функции), то есть, такой пример тоже будет работать:
Ленивый `\d+?` будет брать цифры до пробела, то есть `123`. После каждой цифры он будет останавливаться, проверять -- не пробел ли дальше? Если нет -- брать ещё цифру, в итоге возьмёт `123`.
5
+
6
+
З в дело вступит `\d+`, который по-максимуму возьмёт дальнейшие цифры, то есть `456`.
0 commit comments