- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以我已经编写了一个函数,该函数适用于不接受参数的函数(基于下划线限制),但我想让它足够通用以传递一个可变数量的函数参数。这是我拥有的:
(function () {
var lastTime = new Date().getTime();
function foo() {
var newTime = new Date().getTime();
var gap = newTime - lastTime; // Travels up scope chain to use parents lastTime. Function has access to variables declared in the same scope
console.log('foo called, gap:' + gap);
lastTime = newTime; // Updates lastTime
//console.log(x);
//x++;
}
var throttle = function(func, wait) {
var result;
var timeout = null; // flag updated through closure
var previous = 0; // time last run updated through closure
return function() { //func, wait, timeout, previous available through scope
var now = new Date().getTime();
var remaining = wait - (now - previous);
if (remaining <= 0) {
clearTimeout(timeout);
timeout = null;
previous = now;
result = func.apply(this, arguments); //func is available through closure
}
return result;
};
};
document.addEventListener("scroll", throttle(foo, 1000));
//document.addEventListener("scroll", throttle(foo(5), 2000));
}());
但我想将 foo 修改为 foo(x) 并让它工作
(function () {
var lastTime = new Date().getTime();
function foo(x) {
var newTime = new Date().getTime();
var gap = newTime - lastTime; // Travels up scope chain to use parents lastTime. Function has access to variables declared in the same scope
console.log('foo called, gap:' + gap);
lastTime = newTime; // Updates lastTime
console.log(x);
x++;
}
var throttle = function(func, wait) {
var result;
var timeout = null; // flag updated through closure
var previous = 0; // time last run updated through closure
return function() { //func, wait, timeout, previous available through scope
var now = new Date().getTime();
var remaining = wait - (now - previous);
if (remaining <= 0) {
clearTimeout(timeout);
timeout = null;
previous = now;
result = func.apply(this, arguments); //func is available through closure
}
return result;
};
};
document.addEventListener("scroll", throttle(foo(5), 2000));
}());
最佳答案
throttle (foo(5), 2000)
将不起作用,因为当您使用括号调用函数时,您正在调用该函数。
将 foo
传递给 throttle 时,您需要将其包装在匿名函数中。
throttle(function(){
foo(5)
}, 2000)
如果您想跟踪 x
的原始值。将 foo 包装在一个函数中并返回 foo。将值捕获在闭包范围内。
function foo(x) {
return function(){
var newTime = new Date().getTime();
var gap = newTime - lastTime; // Travels up scope chain to use parents lastTime. Function has access to variables declared in the same scope
console.log('foo called, gap:' + gap);
lastTime = newTime; // Updates lastTime
console.log(x);
x++;
}
}
然后你实际上可以使用 throttle(foo(5), 2000)
因为它不会在第一次调用时执行预期的功能。
此处示例:http://repl.it/XOj/5 (固定示例)
接受任意数量的参数,修改 throttle 的解决方案:
function throttle(func, wait, args){
//do throttle stuff
func.apply(null, args);
}
然后 throttle(foo(5), 2000)
变成 throttle(foo, 2000, [5])
关于javascript - 是否可以创建一个可以将另一个函数(也有参数)作为参数的 throttle 函数,以及时间延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25418170/
我在使用以下代码时遇到问题。 //Send Creation email ListServDAO.sendCreateEmail(orgId, full, request.getSession().g
我想知道如何在一段时间后调用函数。我试过 time.sleep() 但这会停止整个脚本。我希望脚本继续运行,但在 ???secs 后调用一个函数并同时运行另一个脚本 最佳答案 看看threading.
我有一个在 .NET 4.0 中使用的自定义控件(继承自 TextBox)。 我需要做的是在用户完成输入后执行一些代码,例如他停止打字后一秒钟。 为了提高效率,我不能在每次 Text 更改时都执行此代
我目前正在开发一个应用程序,我想实现一个时间延迟。我不想使用 System.Threading.Thread.Sleep(x);当我读到这篇文章时,线程停止了(UI 卡住) 我目前写的代码是: pub
我需要一些关于我调用 onKeyUp 的 JavaScript 函数的帮助,它是一个 Ajax 函数,但每次我写任何字符时它都会调用该函数并且它会降低页面性能并且它每次都会检查,它是一个用户检查数据库
我想在 PyDev (Eclipse) python 2.75 中创建一个图形窗口。 我做了一些事情,但我想做一个“入口”“眨眼”。它测试用户输入。如果它是一个整数,它应该闪烁绿色一秒钟,然后变成白色
再次嗨,网络大师:)现在,我有一个新的愚蠢问题,我请求原谅。我到处阅读有关此解决方案的信息,但没有找到适合我的解决方案。 我有: 我要问的是如何使其不在按下按钮后进行检查,而是在键盘不活动 1000
我通过了几种导致时间延迟的方法,例如 pings 和 dirs。虽然它们都不是真正精确的,但有没有适当的方法来导致时间延迟? 我听说了一些东西,尽管它们不适用于所有计算机,不适用于我的 Windows
这个问题在这里已经有了答案: Simple C app using 50% cpu (6 个答案) 关闭 8 年前。 我尝试使用 ncurses 库和 C 编写一个 CUI Snake 游戏。一切正
我写了一个带有时间延迟的源代码。在 unix 中我使用了 #include 头文件和 usleep功能。 在 Windows 上这相当于什么? 在windows上写同样的代码应该用什么库和函数 最佳答
我正在尝试让我的 JButton 在我正在创建的游戏中闪烁红色。该网站上的所有解决方案都建议使用线程并将其置于 sleep 状态或使用计时器,但是,暂停缓解似乎是在颜色更改之后发生的 这是我的代码:
我正在使用 Javascript 和 HTML5 CANvas 制作动画。如何在 for 循环中实现延迟(非阻塞)?我想确保在延迟结束之前不会绘制第二条线。 for (i=1;i
我正在尝试让我的 JButton 为我正在创建的游戏闪烁红色。该网站上的所有解决方案都建议使用线程并将其置于 sleep 状态或使用计时器,但是,暂停似乎是在颜色变化之后出现的 这是我的代码: Col
我正在使用 Node.js(v0.12.4) 和 Socket.io(1.3.2) 开发实时交易应用程序。在那方面,当从 Node.js 向 GUI(Socket.Io) 发出响应时,我面临将近 (1
我试图弄清楚如何在 Excel VBA 中使用时间延迟。 这是我想做的事情: 我在宏中有一个按钮,当我单击它时,它会发送第一封电子邮件。然后 1 小时后,我想自动发送第二封电子邮件,而无需单击另一个按
我是一名优秀的程序员,十分优秀!