这是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
?
答案 0 :(得分:22)
这是一种跨浏览器的方式,能够传递额外的参数,这些参数将作为回调的参数出现,如setTimeout()
。这在IE中不起作用。
它可以让你的代码更漂亮......
setTimeout(_.bind(function() { }, null, "arg1"), 1e3);
... ... VS
_.delay(function() { }, 1e3, "arg1");
我同意它是不太有用的Underscore方法之一,Naomi's answer中概述了这些方法。
答案 1 :(得分:14)
因为愚蠢。这个特殊的underscore.js方法看起来很愚蠢。为什么Underscore.js有延迟功能?
<强>缺点强>
<强>赞成强>
本节特意留空
我只是学习使用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的东西很难!
答案 2 :(得分:9)
AES·泰德·芯片
该图书馆的作者,选择利用他/她的业余时间来开源,谈论它,用它作为一种方式向人们介绍javascript,也许让某人有一个灯泡时刻关闭范围以为图书馆的吸引力因此得到了提升。
孤立地争论这个功能的相关性就像争论绘画或其他工艺的相关性。有些人可能喜欢它,有些人可能不喜欢。
你可以自由喜欢或不喜欢。我个人而言,更喜欢刚刚进入点的库。
_.delay, _.defer, _.throttle, _.after
有一个流程恕我直言,比窗口读得更好。
除此之外,通常我也喜欢编写节点服务器端(nodejs)而不必转换/进/出模式...尝试在节点中使用window.timeout
并查看会发生什么。
答案 3 :(得分:4)
并不多,虽然它与defer
,debounce
等主题相符。这意味着您可以使用下划线包装符号:
_(yourfunction).delay(1000);
此外,它似乎不会让你逃脱一个字符串参数,它将调用eval。