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

今天去面试遇到的一道题,想了好久没想出来,被鄙视了。
要求:
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);

我能想到的就是这个,但是还是用了全局变量,,,求解!!!

阅读 2.4k
3 个回答
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)
}

这道题明显考的是闭包。

按你采纳的想法,我觉得

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)

这样也行吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题