如何在 javascript 中将 intervalID 传递给 interval 函数
How to pass intervalID to interval function in javascript?
在javascript中,当我创建一个间隔时,我想从函数内部停止间隔,但我不想像这样从外部引用ID值
var y = setInterval(function(){ clearInterval(y); }, 1000);
我想要的是传递一个类似于这种风格的变量
setTimeout(function(data){alert(data);}, 1000, "data");
这也适用于 setInterval,除了我无法真正传递 setInterval 函数返回的 id 值,因为它是在调用它之后创建的。
现在我正在做这样的黑客:
var r = [];
var y = setInterval(function(r){ if (r.length==1) { clearInterval(r[0]); } }, 1000, r);
r.push(y);
有谁知道正确的方法?
谢谢
你必须使用返回值,但这并不意味着变量需要可以被其他任何东西访问;只需封装:
(function() {
var y = setInterval(function(){ clearInterval(y); }, 1000);
})();
上面的y
只能在外部匿名函数中访问,该函数只有间隔函数,其中没有其他函数。
您甚至可以给自己一个可重用的setInterval
包装器来做到这一点:
function setIntervalWrapper(callback, time) {
var args = Array.prototype.slice.call(arguments, 1);
args[0] = setInterval(function() {
callback.apply(null, args);
}, time);
}
这会将时间句柄作为第一个参数传递到您指定的任何其他参数前面。它还具有跨浏览器可靠地支持这些后续参数的好处(一些较旧的浏览器不支持将参数传递给回调)。
无端的例子:
function setIntervalWrapper(callback, time) {
var args = Array.prototype.slice.call(arguments, 1);
args[0] = setInterval(function() {
callback.apply(null, args);
}, time);
}
var counter = 0;
setIntervalWrapper(function(handle, arg1, arg2) {
console.log("Interval callback called, handle is " + handle + ", args are '" + arg1 + "' and '" + arg2 + "'");
if (++counter > 5) {
console.log("counter > 5, stopping");
clearInterval(handle);
}
}, 500, "a", "b");
您可以创建一个新方法,该方法可以为您提供所需的功能,例如
window.createInterval = function(cb, timeout, data) {
if (typeof cb !== "function") {
throw new Error("Please provide a callback.");
}
var interval = window.setInterval(function(data) {
cb(data, interval);
}, timeout || 0, data);
return interval;
};
现在这工作方式像
var myInterval = window.createInterval(function(data, interval){
console.log(data, interval);
}, 1000, "Hello");
哪些打印 Hello
和间隔 ID(与 myInterval 相同)
window.createInterval = function(cb, timeout, data) {
if (typeof cb !== "function") {
throw new Error("Please provide a callback.");
}
var interval = window.setInterval(function(data) {
cb(data, interval);
}, timeout || 0, data);
return interval;
};
var myInterval = window.createInterval(function(data, interval) {
document.write(data + " " + interval + " " + myInterval);
window.clearInterval(interval);
}, 1000, "Hello");
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 正在尝试停止函数上的Interval
- 如何在react组件构造函数中设置Interval
- 函数中的Interval被调用数百次
- 如何在 javascript 中将 intervalID 传递给 interval 函数
- 更新 Angular $interval 中的变量会导致其他函数运行
- 角度$interval - 访问函数外部的变量
- 如何在我的jquery插件中停止Interval函数
- 获取鼠标坐标画布,并使用interval调用函数
- 如何设置Interval来调用类中的函数
- $interval不能用于回调函数,angular js
- “infinite"设置interval函数“定时”
- Angularjs $interval:使用回调函数作为传入函数的参数
- 在interval JS调用的函数中按interval调用函数
- Angular, Jasmine——监视在$interval/$timeout服务中执行的函数
- 如何运行这个angular $interval函数3次(3个循环)
- 用ng-click函数激活$interval
- $scope变量未在$interval函数内更新
- Angularjs$interval返回的fn不是函数
- 如果服务器尚未响应,如何停止要执行的$interval函数