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
Единственная разница в синтаксисе между `call` и `apply` состоит в том, что `call` ожидает список аргументов, в то время как `apply` принимает объект-псевдомассив.
286
+
Единственная разница в синтаксисе между `call` и `apply` состоит в том, что `call` ожидает список аргументов, в то время как `apply` принимает псевдомассив.
287
287
Мы уже знаем оператор расширения `...` из главы <info: rest-parameters-spread-operator>, который может передавать массив (или любой перебираемый объект) в виде списка аргументов. Поэтому, если мы используем его с `call`, мы можем достичь почти того же, что и `apply`.
288
288
Эти два вызова почти эквивалентны:
289
289
@@ -299,9 +299,9 @@ func.apply(context, args); // тот же эффект
299
299
Если мы посмотрим более внимательно, то между такими использованиями `call` и` apply` есть небольшая разница.
300
300
301
301
- Оператор расширения `...` позволяет передавать *перебираемый* объект `args` в виде списка в `call`.
302
-
- В свою очередь `Apply` принимает только *объект-псевдомассив*`args`.
302
+
- В свою очередь `Apply` принимает только *псевдомассив*`args`.
303
303
304
-
Итак, эти вызовы дополняют друг друга. Там, где мы ожидаем итеративность, работает `call`, где мы ожидаем объект-псевдомассив, работает `apply`.
304
+
Итак, эти вызовы дополняют друг друга. Там, где мы ожидаем итеративность, работает `call`, где мы ожидаем псевдомассив, работает `apply`.
305
305
306
306
И если `args` является перебираемый и похожим на реальный массив, то технически мы могли бы использовать любой из них, но `apply`, вероятно, будет быстрее, потому что это одна операция. Большинство движков JavaScript внутренне оптимизируют его лучше, чем пара `call + spread`.
307
307
@@ -384,7 +384,7 @@ function hash(args) {
384
384
}
385
385
```
386
386
387
-
...К сожалению, это не сработает. Потому что мы вызываем `hash(arguments)`а объект `arguments` является перебираемым и объектом-псевдомассивом, но не реальным массивом.
387
+
...К сожалению, это не сработает. Потому что мы вызываем `hash(arguments)`, а объект `arguments` является перебираемым и псевдомассивом, но не реальным массивом.
388
388
389
389
Таким образом, вызов `join` для него потерпит неудачу, что мы и можем видеть ниже:
390
390
@@ -440,7 +440,7 @@ hash(1, 2);
440
440
Для реализации `cachingDecorator` мы изучили методы:
441
441
442
442
-[func.call(context, arg1, arg2...)](mdn:js/Function/call) -- вызывает `func` с данным контекстом и аргументами.
443
-
-[func.apply(context, args)](mdn:js/Function/apply) -- вызывает `func` передавая `context` как `this` и объект-псевдомассив `args` как список аргументов.
443
+
-[func.apply(context, args)](mdn:js/Function/apply) -- вызывает `func` передавая `context` как `this` и псевдомассив `args` как список аргументов.
444
444
445
445
В основном *переадресация вызова* выполняется с помощью `apply`:
0 commit comments