小米公司JavaScript面试题
作者:bea
面试题目 一、 代码如下: 请定义这样一个函数 function repeat (func, times, wait) { } 这个函数能返回一个新函数,比如这样用 var repeatedFun = repeat(alert, 10, 5000) 调用这个 repeatedFun ("hellworld") 会alert十次 helloworld, 每次间隔5秒 二、 代码如下: 写一个函数stringconcat, 要求能 var resul
面试题目
一、
代码如下:
请定义这样一个函数
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);
有用 | 无用
一、
代码如下:
请定义这样一个函数
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实现获取onclick、onchange等事件的值
- JavaScript实现列出数组中最长的连续数
- jQuery中document与window以及load与ready 区别详解
- jQuery中:header选择器用法实例
- JavaScript实现查找字符串中第一个不重复的字符
- 基于jQuery的JavaScript模版引擎JsRender使用指南
- JavaScript中的数学运算介绍
- jQuery中:lt选择器用法实例
- JavaScript中的数值范围介绍
- JavaScript常用小技巧小结
- jQuery中:gt选择器用法实例
- 在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
- JavaScript中的值类型详细介绍
- JavaScript不使用prototype和new实现继承机制
- JavaScript中的console.assert()函数介绍
- jQuery中:eq()选择器用法实例
- 根据配置文件加载js依赖模块
- JavaScript中的console.dir()函数介绍
- JavaScript中的console.group()函数详细介绍