標籤:style blog io ar color sp java for on
面試題目
一、
請定義這樣一個函數
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面試題