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

不使用全局变量怎么写一个时间自增的轮询方法

不使用全局变量怎么写一个时间自增的轮询方法

泛舟湖上清波郎朗 2019-03-14 22:15:14
今天去面试遇到的一道题,想了好久没想出来,被鄙视了。要求:1、poll方法接收两个函数,checkStatus和callback,其中checkStatus返回值是布尔类型,true或false,callback是回调函数。2、如果checkStatus返回true,执行callback,否则继续执行checkStatus但是需要延时。3、轮询时间需要不断增加,第一次执行checkStatus返回false之后,需要1000ms再执行第二次,以后每一次的时间都要增加1.5倍。4、不得使用全局变量。function time1(){    var t = 1000;    function time2(){        t *= 1.5;           return t;    }    return time2;}var time3 = time1();function poll(checkStatus,callback){    if(checkStatus()){        callback();    }else{        setTimeout(function(){            console.log(new Date());            poll(checkStatus,callback);        },time3());    }}function checkStatus(){    return 0;}function callback(){    console.log('callback');}poll(checkStatus,callback);我能想到的就是这个,但是还是用了全局变量,,,求解!!!
查看完整描述

3 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

function poll (checkStatus, callback) {

  const poll = (checkStatus, callback, time) => {

    if (checkStatus()) {

      callback()

    } else {

      setTimeout(() => {

        console.log(new Date())

        poll(checkStatus, callback, time * 1.5)

      }, time)

    }

  }

  poll(checkStatus, callback, 1000)

}


查看完整回答
反对 回复 2019-04-09
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

这道题明显考的是闭包。


查看完整回答
反对 回复 2019-04-09
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

按你采纳的想法,我觉得


function poll (checkStatus,callback,time) {

        if(checkStatus()){

            callback()

        }else{

            setTimeout(()=>{

                poll(checkStatus,callback,time*1.5)

            },time)

        }

    }

    function checkStatus(){

        return true;

    }

    function callback () {

        console.log()

    }

    poll(checkStatus,callback,1000)

这样也行吧


查看完整回答
反对 回复 2019-04-09
  • 3 回答
  • 0 关注
  • 567 浏览
慕课专栏
更多

添加回答

举报

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