小米公司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"

小菜解法

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

复制代码 代码如下:

/**
 * 第一题
 * @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);



相关阅读:
win10怎么设置扩展显示器?win10双显示屏的设置方法
Javscript删除数组中指定元素并返回新数组
纯css写的评分鼠标移入的效果附图
win7系统电脑怎么套用修改网页内容 win7系统电脑套用修改网页内容方法
Win8系统通过IE创建VPN以满足上网需求
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
jsp和servlet的区别探讨
win7/8.1如何免费升级win10?免费升级Win10的正确姿势
js中array的sort()方法使用介绍
JS生成某个范围的随机数【四种情况详解】
ASP.NET读取RSS的方法
用VC++6.0实现石头剪刀布游戏的程序
基于Bootstrap的UI扩展 StyleBootstrap
配置iptables实现本地端口转发的方法详解
快速导航

Copyright © 2016 phpStudy | 皖ICP备18014864号-4