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

 

你可能感兴趣的:(面试,javascript,前端)