小米公司JavaScript面试题
面试题目
一、
请定义这样一个函数
functionrepeat(func,times,wait){
}
这个函数能返回一个新函数,比如这样用
varrepeatedFun=repeat(alert,10,5000)
调用这个repeatedFun("hellworld")
会alert十次helloworld,每次间隔5秒
二、
写一个函数stringconcat,要求能
varresult1=stringconcat("a","b") result1="a+b"
varstringconcatWithPrefix=stringconcat.prefix("hellworld");
varresult2=stringconcatWithPrefix("a","b") result2="hellworld+a+b"
小菜解法
这两道题,考的就是闭包,废话不多说,直接上代码。
/**
*第一题
*@paramfunc
*@paramtimes
*@paramwait
*@returns{repeatImpl}
*/
functionrepeat(func,times,wait){
//不用匿名函数是为了方便调试
functionrepeatImpl(){
varhandle,
_arguments=arguments,
i=0;
handle=setInterval(function(){
i=i+1;
//到达指定次数取消定时器
if(i===times){
clearInterval(handle);
return;
}
func.apply(null,_arguments);
},wait);
}
returnrepeatImpl;
}
//测试用例
varrepeatFun=repeat(alert,4,3000);
repeatFun("hellworld");
/**
*第二题
*@returns{string}
*/
functionstringconcat(){
varresult=[];
stringconcat.merge.call(null,result,arguments);
returnresult.join("+");
}
stringconcat.prefix=function(){
var_arguments=[],
_this=this;
_this.merge.call(null,_arguments,arguments);
returnfunction(){
var_args=_arguments.slice(0);
_this.merge.call(null,_args,arguments);
return_this.apply(null,_args);
};
};
stringconcat.merge=function(array,arrayLike){
vari=0;
for(i=0;i<arrayLike.length;i++){
array.push(arrayLike[i]);
}
}
//测试用例
varresult1=stringconcat("a","b");//result1="a+b"
varresult3=stringconcat("c","d");//result1="a+b"
varstringconcatWithPrefix=stringconcat.prefix("hellworld");
varstringconcatWithPrefix1=stringconcat.prefix("hellworld1");
varresult2=stringconcatWithPrefix("a","b");//result2="hellworld+a+b"
varresult4=stringconcatWithPrefix1("c","d");//result2="hellworld+a+b"
alert(result1);
alert(result2);
alert(result3);
alert(result4);