小米公司JavaScript面试题
小米公司JavaScript面试题
发布时间:2016-12-30 来源:查字典编辑
摘要:面试题目一、复制代码代码如下:请定义这样一个函数functionrepeat(func,times,wait){}这个函数能返回一个新函数,...

面试题目

一、

复制代码 代码如下:

请定义这样一个函数

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"

小菜解法

这两道题,考的就是闭包,废话不多说,直接上代码。

复制代码 代码如下:

/**

* 第一题

* @param func

* @param times

* @param wait

* @returns {repeatImpl}

*/

function repeat (func, times, wait) {

//不用匿名函数是为了方便调试

function repeatImpl(){

var handle,

_arguments = arguments,

i = 0;

handle = setInterval(function(){

i = i + 1;

//到达指定次数取消定时器

if(i === times){

clearInterval(handle);

return;

}

func.apply(null, _arguments);

},wait);

}

return repeatImpl;

}

//测试用例

var repeatFun = repeat(alert, 4, 3000);

repeatFun("hellworld");

/**

* 第二题

* @returns {string}

*/

function stringconcat(){

var result = [];

stringconcat.merge.call(null, result, arguments);

return result.join("+");

}

stringconcat.prefix = function(){

var _arguments = [],

_this = this;

_this.merge.call(null, _arguments, arguments);

return function(){

var _args = _arguments.slice(0);

_this.merge.call(null, _args, arguments);

return _this.apply(null, _args);

};

};

stringconcat.merge = function(array, arrayLike){

var i = 0;

for(i = 0; i < arrayLike.length; i++){

array.push(arrayLike[i]);

}

}

//测试用例

var result1 = stringconcat("a", "b"); //result1 = "a+b"

var result3 = stringconcat("c", "d"); //result1 = "a+b"

var stringconcatWithPrefix = stringconcat.prefix("hellworld");

var stringconcatWithPrefix1 = stringconcat.prefix("hellworld1");

var result2 = stringconcatWithPrefix("a", "b"); //result2 = "hellworld+a+b"

var result4 = stringconcatWithPrefix1("c", "d"); //result2 = "hellworld+a+b"

alert(result1);

alert(result2);

alert(result3);

alert(result4);

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类