为了账号安全,请及时绑定邮箱和手机立即绑定

js 取值 问题

js 取值 问题

偶然的你 2019-02-25 17:35:21
 timeDown:function (time,interval,callback) {            var timeCount=setTimeout(function () {                (callback||new Function)();                if(time===0){                    clearTimeout(timeCount);                }else{                    time--;                    console.log(time);                    setTimeout(arguments.callee,interval);                }            },interval);        }以上实现一个倒计时功能我希望这样调用A.timeDown(60,1000,function(){    //do something    $("#xx").text(time)  //我希望能够获取 正在变化的time})首先我这么设计应该没啥问题吧?我的问题是 ,我能否取出 timeDown里不停变化的time作为callback里的参数,应该怎么实现?(不考虑使用一个全局变量来接收或者传递time)
查看完整描述

2 回答

?
慕的地6264312

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);

});


查看完整回答
反对 回复 2019-03-07
?
蓝山帝景

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值

})


查看完整回答
反对 回复 2019-03-07
  • 2 回答
  • 0 关注
  • 416 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信