小米2018春招实习笔试题总结

Question1:
有一个url数组

var urls = ['/a', '/b', '/c',...]

要求依次请求这几个url, 要求是 第一个请求完了才发第二个请求,第二个完了才发第三个请求
如此依次。

function reqst(index){
      var ajaxObj = new XMLHttpRequest();
      ajaxObj.open('get',urls[index]);
      ajaxObj.send();
      ajaxObj.onreadystatechange = function () {
        if (ajaxObj.readyState==4&&ajaxObj.status==200) {
          console.log(urls[index]+'请求成功');
          if(index<len-1){
            reqst(index++);
          }else{
            console.log('url数组中的url全部请求完成');
          }
        }
      }  
}
var urls = ['/a', '/b', '/c']
var len = urls.length;
reqst(0);    

Question2:
定义这样一个函数
function repeat(func, times, wait) {
}
参数分别是需要 repeat的函数, repeat的次数,每次repeat的间隔
使用方式如下
调用这个函数能返回一个新函数。

比如传入的是alert, 执行10次,间隔5秒
var repeatedFun = repeat(alert, 10, 5000);
调用返回的这个新函数,如:

repeatedFun("hellworld");

会alert十次 helloworld

有三种解决思路:

(1)sleep(n)

function repeat(func, times, wait) {
  return function(str){
    for(var i=0;i<times;i++){
      func(str);
      sleep(wait);
    }
  }
}
function sleep(n){
 var start=new Date().getTime();
 console.log(start);
 while(true){
  var time=new Date().getTime();
  if(time-start>n){
    break;
  }
 }
}
var repeatedFun = repeat(alert, 3, 5000);
repeatedFun("hellworld");

 (2) setInterval

function repeat(func, times, wait) {

  return function f(str){
    var t;
    var flag = 0;
    var interval = setInterval(function(){
      flag++;
      if(flag === times){
         clearInterval(interval);
      }
      func(str);
    }, wait);
  }

}

var repeatedFun = repeat(alert, 10, 5000);
repeatedFun("hellworld");

(3)setTimeout,利用回调实现

function repeat(func, times, wait) {

  return function f(str){
    var flag = 0;
    func(str);
    var interval = setTimeout(function(){
      flag++;
      if(flag === times){
         clearInterval(interval);
      }
      f(str);
    }, wait);
  }

}

var repeatedFun = repeat(alert, 10, 5000);
repeatedFun("hellworld");

猜你喜欢

转载自www.cnblogs.com/zhenguoli/p/8919855.html