面试题目
一、
请定义这样一个函数
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);
新闻热点
疑难解答