2 回答
TA贡献1817条经验 获得超6个赞
代码这样写:
arguments.callee不推荐使用,就像eval一样
function timeDown(time,interval,callback) {
var timeCount;
var timeFun = function () {
if (time === 0) {
clearTimeout(timeCount);
} else {
time--;
timeCount = setTimeout(timeFun, interval);
}
callback && callback(time);
};
setTimeout(timeFun, interval);
}
timeDown(60,1000,function(time){
//do something
console.log("time:"+time);
});
TA贡献1843条经验 获得超7个赞
最好用setInterval,因为每次setTimeout都是一个新的定时器。
下面这个不需要在全局里面加变量,也不需要在A里面加其他东西。
timeDown: (function () {
// 局部变量存放time值
var _time = 0;
function timeDown(time, interval, callback) {
_time = time;
// 开启定时器
var timer = setInterval(function () {
// 执行回调
callback && callback();
// 判断次数
if (--_time <= 0) {
clearInterval(timer);
}
}, interval);
}
// 只暴露一个getTime给外部获取time值
timeDown.getTime = function () {
return _time;
}
return timeDown;
})()
A.timeDown(60, 1000, function () {
//do something
console.log(A.timeDown.getTime()) // 使用timeDown.getTime获取到time值
})
添加回答
举报