0

По заданию: Добавьте всем функциям в прототип метод 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);

Kromster
  • 13,809
  • "во второй строке контекст вроде как равен underfined" - это Вы как выяснили? –  Feb 06 '19 at 21:52

1 Answers1

1

Потому что параметры для суммирующей функции function f(a, b) появляются только во втором вызове. То есть в вызове анонимной функции, возвращенной из defer.

Контекст во втором вызове, сохраненный в context, - это window.