小米公司JavaScript面试题


Posted in Javascript onDecember 29, 2014

面试题目

一、

 请定义这样一个函数

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 相关文章推荐
让你的网站可编辑的实现js代码
Oct 19 Javascript
javascript options属性集合操作代码
Dec 28 Javascript
jQuery中$.fn的用法示例介绍
Nov 05 Javascript
jQuery处理图片加载失败的常用方法
Jun 08 Javascript
ES6中如何使用Set和WeakSet
Mar 10 Javascript
原生js和jquery分别实现横向导航菜单效果
May 13 Javascript
JavaScript6 let 新语法优势介绍
Jul 15 Javascript
第一次接触神奇的Bootstrap网格系统
Jul 27 Javascript
关于List.ToArray()方法的效率测试
Sep 30 Javascript
解决jQuery使用append添加的元素事件无效的问题
Aug 30 jQuery
VUE DOM加载后执行自定义事件的方法
Sep 07 Javascript
JavaScript中引用vs复制示例详析
Dec 06 Javascript
谷歌浏览器调试JavaScript小技巧
Dec 29 #Javascript
JavaScript中的console.trace()函数介绍
Dec 29 #Javascript
JavaScript中的console.profile()函数详细介绍
Dec 29 #Javascript
jQuery中element选择器用法实例
Dec 29 #Javascript
JavaScript中的console.time()函数详细介绍
Dec 29 #Javascript
JavaScript前端图片加载管理器imagepool使用详解
Dec 29 #Javascript
JavaScript版的TwoQueues缓存模型
Dec 29 #Javascript
You might like
15个小时----从修改程序到自己些程序
2006/10/09 PHP
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
2008/11/18 PHP
php更新mysql后获取影响的行数发生异常解决方法
2013/03/28 PHP
php中get_headers函数的作用及用法的详细介绍
2013/04/27 PHP
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
用cssText批量修改样式
2009/08/29 Javascript
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
js实现div弹出层的方法
2014/11/20 Javascript
javascript实时获取鼠标坐标值并显示的方法
2015/04/30 Javascript
jquery实现简单的自动播放幻灯片效果
2015/06/13 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
2016/01/25 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
webuploader分片上传的实现代码(前后端分离)
2018/09/10 Javascript
vue项目中axios请求网络接口封装的示例代码
2018/12/18 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
2019/04/04 Javascript
python开发之thread实现布朗运动的方法
2015/11/11 Python
python内置数据类型之列表操作
2018/11/12 Python
Django组件content-type使用方法详解
2019/07/19 Python
用Python从0开始实现一个中文拼音输入法的思路详解
2019/07/20 Python
python3使用GUI统计代码量
2019/09/18 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
django rest framework使用django-filter用法
2020/07/15 Python
Ajax和javascript的区别
2013/07/20 面试题
药剂专业个人求职信范文
2014/04/29 职场文书
毕业典礼演讲稿
2014/05/13 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
同学聚会通知短信
2015/04/20 职场文书
交通事故赔偿起诉书
2015/05/20 职场文书
故意伤害辩护词
2015/05/21 职场文书
创业的9条正确思考方式
2019/08/26 职场文书
Pygame Rect区域位置的使用(图文)
2021/11/17 Python
详解Vue router路由
2021/11/20 Vue.js
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang