Почему функция Underscore.js имеет функцию задержки?

Это исходный код для функции Underscore.js 'delay:

_.delay = function (func, wait) {
    var args = slice.call(arguments, 2);
    return setTimeout(function () { return func.apply(null, args); }, wait);
};

Как это отличается от setTimeout? Почему Underscore.js требуется delay?

Ответы

Ответ 1

Это кросс-браузерный способ передачи дополнительных аргументов, которые будут отображаться в качестве аргументов для обратного вызова, например setTimeout(). Это не работает в IE.

Он может сделать ваш код более красивым...

setTimeout(_.bind(function() { }, null, "arg1"), 1e3);

... против...

_.delay(function() { }, 1e3, "arg1");

Я согласен, что это один из менее полезных методов Underscore, описанных в Ответ Наоми.

Ответ 2

Почему функция Underscore.js имеет функцию задержки?

Потому что немой. Этот метод underscore.js кажется довольно глупым.

против

  • дополнительная функция в lib означает большую базу кода
  • большая база кода означает больше для поддержки и более возможных ошибок.
  • код, который использует эту функцию, теперь имеет зависимость от lib
  • меньшее/нольное улучшение по сравнению с собственным API означает низкую стоимость: коэффициент усиления
  • новый apis для изучения.

Pros

этот раздел намеренно оставил пустой


Я бы просто научился использовать javascript и делать что-то вроде

var hello = function() {
  console.log("hello");
};

var delay = 1000;

window.setTimeout(hello, delay);

Простой, не так ли? Underscore.js иногда довольно бесполезен. Честно говоря, window.setTimeout отлично подойдет именно так, как есть.


Вот еще один пример, чтобы показать, как передать arg функции

var Cat = function(name) {
  function meow(message) {
    console.log(name, "says meow!", message);
  }
  this.meow = meow;
};

var duchess = new Cat("Duchess");

window.setTimeout(duchess.meow.bind(duchess, "please feed me!"), 2000);

// 2 seconds later
// => Duchess says meow! please feed me!

Если вы не можете зависеть от .bind, вы также можете использовать закрытие

window.setTimeout(function() {
  duchess.meow("please feed me!");
}, 1000);

Ничего себе, это было сложно. Я возвращаюсь к подчеркиванию, lodash и jquery. Этот материал для JavaScript очень прост!

Ответ 3

АЕС · Термическое · ектронное

Автор этой библиотеки, который решил потратить свое свободное время на открытие исходного кода, расскажет об этом, использует его как способ познакомить людей с javascript и, возможно, заставить кого-то затворить лампочку вокруг закрытия сфера охвата показала, что привлекательность библиотеки была усилена благодаря этому.

Утверждение релевантности этой функции в изоляции - это то же самое, что утверждать релевантность картины или другой части мастерства. Некоторым это может понравиться, другие - нет.

Вы можете любить это или нет. Я, лично, предпочитаю просто-получающе-точечные библиотеки.

_.delay, _.defer, _.throttle, _.after имеют поток IMHO, который читает лучше, чем окно.

В верхней части этого, как правило, мне также нравится писать серверную часть node (nodejs) и не менять/входить/выходить из режима... попробуйте использовать window.timeout в node и посмотрите, что произойдет.

Ответ 4

Не так много, хотя он тематически соответствует defer, debounce и т.д. Это означает, что вы можете использовать нотацию обмотки подчеркивания:

_(yourfunction).delay(1000);

Также не похоже, что это позволит вам уйти со строковым аргументом, который вызовет eval.