我的全局setTimeout
功能如下:
myTimer = function(){
var timer;
this.set = function(saveFormCB) {
timer = setTimeout(function() {
saveFormCB();
}, 10000)
};
this.clear = function() {
clearInterval(timer);
};
return this;
}();
如果我愿意,上面会延迟saveFormCB()执行10秒:
myTimer.clear()
myTimer.set(function () {
saveFormCB()
});
某些组件需要比10秒更快的执行速度,比如5秒。所以我需要myTimer函数的动态延迟。我在下面做了但没有工作:
myTimer = function(a){
var timer;
this.set = function(saveFormCB) {
timer = setTimeout(function() {
saveFormCB();
}, a || 10000)
};
this.clear = function() {
clearInterval(timer);
};
return this;
}();
任何帮助将不胜感激
由于
附加信息
myTimer
执行输入事件。每次没有输入,myTimer
将被执行,并且值将在执行10 {秒myTimer
后保存到db(使用saveFormCB()函数)
答案 0 :(得分:2)
首先,你的iife正在传递window
,所以你的myTimer是对窗口对象的引用,set和clear是全局的。测试一下。如果你进入严格模式,你会收到错误。
你需要的不是让它成为一个生命并使它成为一个构造函数,并使它Timer
只是作为构造函数的约定
Timer = function(a){
var timer;
this.set = function(saveFormCB) {
timer = setTimeout(function() {
saveFormCB();
}, a || 10000)
};
this.clear = function() {
clearInterval(timer);
};
return this;
};
var myTimer = new Timer(500);
答案 1 :(得分:1)
首先,我不认为这段代码是对的。
myTimer.set(function () { //new function
saveFormCB() // calling another function inside this function.
});
相反,你可以这样做
myTimer.set(saveFormCB); //directly pass the function call as a parameter.
现在让你的计时器变得动态。使用以下代码。
myTimer = function(){ //remove the parameter here
var timer;
this.set = function(saveFormCB,Timer) { //add the timer parameter here
timer = setTimeout(function() {
saveFormCB();
}, Timer || 10000)
};
this.clear = function() {
clearInterval(timer);
};
return this;
}();
你可以像下面那样执行它,
myTimer.set(saveFormCB,3000);
答案 2 :(得分:0)
哦,你没有正确地将变量传递给闭包。
var THERE_SHOULD_BE_A_VALUE_HERE = 5000;
myTimer = function(a){
var timer;
this.set = function(saveFormCB) {
timer = setTimeout(function() {
saveFormCB();
}, a || 10000)
};
this.clear = function() {
clearInterval(timer);
};
return this;
}(THERE_SHOULD_BE_A_VALUE_HERE);
但这不是动态的,这是你想要的吗?简单的解决方案是在mytimer中添加一个set函数,然后用第二个参数
执行它 myTimer = function(){
var timer;
this.set = function(saveFormCB,a) {
timer = setTimeout(function() {
saveFormCB();
}, a || 10000)
};
this.clear = function() {
clearInterval(timer);
};
return this;
}();
你可以这样称呼它:
myTimer.set(function(){console.log('Hello World')},5000)