小米公司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);