Почему функция 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.