Skip to content

Commit df74cc6

Browse files
committed
some corrections
1 parent 380a378 commit df74cc6

4 files changed

Lines changed: 12 additions & 12 deletions

File tree

1-js/06-advanced-functions/10-bind/3-second-bind/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ f(); // Вася
1414

1515
Следующий вызов `bind` будет устанавливать контекст уже для этого объекта. Это ни на что не повлияет.
1616

17-
Функция не может быть повторно связана.
17+
Можно сделать новую привязку, но нельзя изменить существующую.

1-js/06-advanced-functions/10-bind/5-question-use-bind/solution.md

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

22
Ошибка происходит потому, что `askPassword` получает функции `loginOk/loginFail` без объекта.
33

4-
Когда они вызываются, то, естественно, предполагают `this=undefined`.
4+
Когда они вызываются, то, естественно, получают `this=undefined`.
55

66
Используем `bind`, чтобы передать в `askPassword` функции `loginOk/loginFail` с уже привязанным контекстом:
77

@@ -38,6 +38,6 @@ askPassword(user.loginOk.bind(user), user.loginFail.bind(user));
3838
askPassword(() => user.loginOk(), () => user.loginFail());
3939
```
4040

41-
Обычно это также работает, но может не сработать в более сложных ситуациях, когда `user` может быть перезаписан между моментами запроса и выполнения `() => user.loginOk()`.
41+
Обычно это также работает и хорошо выглядит. Но может не сработать в более сложных ситуациях, когда значение переменной `user` может измениться между вызовом `askPassword` и выполнением `() => user.loginOk()`.
4242

4343

1-js/06-advanced-functions/10-bind/5-question-use-bind/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ importance: 5
22

33
---
44

5-
# askPassword теряет this
5+
# Исправьте функцию, теряющую "this"
66

77
Вызов `askPassword()` в приведенном ниже коде должен проверить пароль и затем вызвать `user.loginOk/loginFail` в зависимости от ответа.
88

1-js/06-advanced-functions/10-bind/article.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ libs:
55

66
# Привязка контекста к функции
77

8-
При использовании `setTimeout` с методами объекта (или при передаче методов объекта) возникает известная проблема: «потеря `this`».
8+
При использовании `setTimeout` с методами объекта (или при передаче методов объекта) возникает известная проблема: "потеря `this`".
99

1010
Внезапно, `this` просто перестает работать правильно. Такая ситуация типична для новичков, но также случается и с опытными разработчиками.
1111

@@ -92,7 +92,7 @@ user = { sayHi() { alert("Другой пользователь в 'setTimeout'!
9292

9393
## Решение 2: привязать контекст с помощью bind
9494

95-
В современном JavaScript у функций есть встроенный метод [bind](mdn:js/Function/bind), который позволяет исправить `this`.
95+
В современном JavaScript у функций есть встроенный метод [bind](mdn:js/Function/bind), который позволяет зафиксировать `this`.
9696

9797
Базовый синтаксис `bind`:
9898

@@ -101,7 +101,7 @@ user = { sayHi() { alert("Другой пользователь в 'setTimeout'!
101101
let boundFunc = func.bind(context);
102102
```
103103

104-
Результатом вызова `func.bind(context)` является подобный функции специальный «экзотический объект», который вызывается как функция и прозрачно передает вызов в `func`, при этом устанавливая `this=context`.
104+
Результатом вызова `func.bind(context)` является особый "экзотический объект" (термин взят из спецификации), который вызывается как функция и прозрачно передает вызов в `func`, при этом устанавливая `this=context`.
105105

106106
Другими словами, вызов `boundFunc` подобен вызову `func` с фиксированным `this`.
107107

@@ -122,7 +122,7 @@ funcUser(); // Вася
122122
*/!*
123123
```
124124

125-
Здесь `func.bind(user)` - это «связанный вариант» `func`, с фиксированным `this=user`.
125+
Здесь `func.bind(user)` - это "связанный вариант" `func`, с фиксированным `this=user`.
126126

127127
Все аргументы передаются исходному методу `func` "как есть", например:
128128

@@ -162,9 +162,9 @@ sayHi(); // Привет, Вася!
162162
setTimeout(sayHi, 1000); // Привет, Вася!
163163
```
164164

165-
В строке `(*)` мы берем метод `user.sayHi` и привязываем его к `user`. `SayHi` - это «связанная» функция, которая может быть вызвана отдельно или передана в `setTimeout` (контекст всегда будет правильным).
165+
В строке `(*)` мы берем метод `user.sayHi` и привязываем его к `user`. Теперь `SayHi` - это "связанная" функция, которая может быть вызвана отдельно или передана в `setTimeout` (контекст всегда будет правильным).
166166

167-
Здесь мы можем видеть, что `bind` исправляет только `this`, а аргументы передаются «как есть»:
167+
Здесь мы можем видеть, что `bind` исправляет только `this`, а аргументы передаются "как есть":
168168

169169
```js run
170170
let user = {
@@ -196,6 +196,6 @@ for (let key in user) {
196196
197197
## Итого
198198
199-
Метод `func.bind(context, ...args)` возвращает «связанный вариант» функции `func`, который фиксирует контекст `this` и первые аргументы, если они заданы.
199+
Метод `func.bind(context, ...args)` возвращает "связанный вариант" функции `func`, который фиксирует контекст `this` и первые аргументы, если они заданы.
200200
201-
Обычно мы применяем `bind`, для исправления `this` в методе объекта, чтобы мы могли передать его куда-нибудь. Например, в `setTimeout`. В современной разработке существуют и другие причины для «связывания», мы встретимся с ними позже.
201+
Обычно мы применяем `bind`, для исправления `this` в методе объекта, чтобы мы могли передать его куда-нибудь. Например, в `setTimeout`. В современной разработке существуют и другие причины для "связывания", мы встретимся с ними позже.

0 commit comments

Comments
 (0)