首页 > 代码库 > 小米Web前端JavaScript面试题

小米Web前端JavaScript面试题

面试题目

 

一、

 

请定义这样一个函数

 

function repeat (func, times, wait) {

 

}

 

这个函数能返回一个新函数,比如这样用

 

var repeatedFun = repeat(alert, 10, 5000)

 

调用这个 repeatedFun ("hellworld")

 

会alert十次 helloworld, 每次间隔5秒

 

二、

 

写一个函数stringconcat, 要求能

var result1 = stringconcat("a", "b")  result1 = "a+b"

 

var stringconcatWithPrefix = stringconcat.prefix("hellworld");

 

var result2 = stringconcatWithPrefix("a", "b")  result2 = "hellworld+a+b"

 

小菜解法

 

     这两道题,考的就是闭包,废话不多说,直接上代码。

 1 /** 2  * 第一题 3  * @param func 4  * @param times 5  * @param wait 6  * @returns {repeatImpl} 7  */ 8 function repeat (func, times, wait) { 9     //不用匿名函数是为了方便调试10     function repeatImpl(){11         var handle,12             _arguments = arguments,13             i = 0;14         handle = setInterval(function(){15             i = i + 1;16             //到达指定次数取消定时器17             if(i === times){18                 clearInterval(handle);19                 return;20             }21             func.apply(null, _arguments);22         },wait);23     }24 25     return repeatImpl;26 }27 28 //测试用例29 var repeatFun = repeat(alert, 4, 3000);30 31 repeatFun("hellworld");32 33 34 /**35  * 第二题36  * @returns {string}37  */38 function stringconcat(){39     var result = [];40 41     stringconcat.merge.call(null, result, arguments);42     return result.join("+");43 }44 45 stringconcat.prefix = function(){46     var _arguments = [],47         _this = this;48 49     _this.merge.call(null, _arguments, arguments);50 51     return function(){52         var _args = _arguments.slice(0);53 54         _this.merge.call(null, _args, arguments);55         return _this.apply(null, _args);56     };57 };58 59 stringconcat.merge = function(array, arrayLike){60     var i = 0;61 62     for(i = 0; i < arrayLike.length; i++){63         array.push(arrayLike[i]);64     }65 }66 67 68 //测试用例69 var result1 = stringconcat("a", "b"); //result1 = "a+b"70 var result3 = stringconcat("c", "d"); //result1 = "a+b"71 72 var stringconcatWithPrefix = stringconcat.prefix("hellworld");73 var stringconcatWithPrefix1 = stringconcat.prefix("hellworld1");74 75 var result2 = stringconcatWithPrefix("a", "b"); //result2 = "hellworld+a+b"76 var result4 = stringconcatWithPrefix1("c", "d"); //result2 = "hellworld+a+b"77 78 alert(result1);79 alert(result2);80 alert(result3);81 alert(result4);

 

小米Web前端JavaScript面试题