我正在使用这段代码来包装部分代码,就像这样使用,
var delay = (function() {
// SET TIMER
var timer = 0;
// RETURN SET TIMEOUT FUNCTION
return function(callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
};
})();?
Run Code Online (Sandbox Code Playgroud)
我称之为,
delay(function() {
.......
}, 1000);
Run Code Online (Sandbox Code Playgroud)
它会延迟1000毫秒,但我不明白发生了什么,谢谢:)
延迟是一个将返回另一个函数的函数.定时器变量位于延迟函数的闭包内,因此它仍然可以被返回函数接收.功能.你也可以这样写
var delay;
var timer = 0;
delay = function(callback, ms) {
clearTimeOut(timer);
timer = setTimeout(callback, ms);
}
Run Code Online (Sandbox Code Playgroud)
您现在遇到的问题是,如果您调用延迟两次,它将覆盖定时器变量,因此第二个延迟将覆盖定时器变量.我测试了这个,似乎你的功能也被破坏应该是:
var delay = function(){
// SET TIMER
var timer = 0;
// RETURN SET TIMEOUT FUNCTION
return function(callback, ms){
clearTimeout(timer);
timer = setTimeout(callback, ms);
};
};
delay()(function(){console.log("hello1");}, 5000);
delay()(function(){console.log("hello2");}, 5000);
Run Code Online (Sandbox Code Playgroud)
如果您的代码执行相同操作,它将只跟踪hello2,因为第一个将覆盖timer变量.
除非您的意图是第二次延迟将停止第一次延迟,否则您应该使用不同的approuch.
| 归档时间: |
|
| 查看次数: |
2665 次 |
| 最近记录: |