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

今天去面试遇到的一道题,想了好久没想出来,被鄙视了。

要求:

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

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


泛舟湖上清波郎朗
浏览 568回答 3
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)}

慕码人2483693

这道题明显考的是闭包。

慕桂英3389331

按你采纳的想法,我觉得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)这样也行吧
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript