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

156
23

Это исходный код для функции 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?

спросил(а) 2013-06-03T07:44:00+04:00 7 лет, 3 месяца назад
1
Решение
187

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


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


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

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


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

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

ответил(а) 2013-06-03T07:58:00+04:00 7 лет, 3 месяца назад
143

Почему функция 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 очень прост!

ответил(а) 2013-06-03T08:32:00+04:00 7 лет, 3 месяца назад
127

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


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


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


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


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


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

ответил(а) 2015-07-11T02:29:00+03:00 5 лет, 2 месяца назад
90

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


_(yourfunction).delay(1000);

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

ответил(а) 2013-06-03T08:05:00+04:00 7 лет, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема