ZdraviiSmisl
@ZdraviiSmisl

Почему контекст сохраняют в двух местах(и внутри ещё пару вопросов)?

По заданию:Добавьте всем функциям в прототип метод defer(ms), который возвращает обёртку, откладывающую вызов функции на ms миллисекунд. Понятно,только то что строка 3 привязывает контекст и аргументы к возвращаемой обёртке,которые берутся из замыкания

Непонятно почему в коде this сохраняется дважды?В строке (1) сохраняется задерживаемая функция,но почему тогда строку с аргументами context(2) перенесли в возвращаемою функцию?Почему не объявили эту переменную перед return?При этом во второй строке контекст вроде как равен underfined

Function.prototype.defer = function(ms) {
  var f = this; // (1)
  return function() {
    var args = arguments,
      context = this;  // (2)
    setTimeout(function() {
      f.apply(context, args); // (3)
    }, ms);
  }
}

// проверка
function f(a, b) {
  alert( a + b );
}

f.defer(1000)(1, 2);
 Выполнить код
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
Потому что не хотят использовать стрелочные функции.
Каждая функция имеет свой контекст, отсюда и извращение с сохранением this.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы