小米2018春招實習筆試題總結

Question1:
有一個url數組ajax

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的間隔
使用方式以下
調用這個函數能返回一個新函數。url

好比傳入的是alert, 執行10次,間隔5秒
var repeatedFun = repeat(alert, 10, 5000);
調用返回的這個新函數,如: spa

repeatedFun("hellworld");code

會alert十次 helloworldblog

有三種解決思路:get

(1)sleep(n)it

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

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");
相關文章
相關標籤/搜索