这篇文章主要介绍了小米公司 JavaScript 面试题的个人解题方法, 需要的朋友可以参考下
小米公司正式成立于 2010 年 4 月,是一家专注于智能产品自主研发的移动互联网公司。"为发烧而生" 是小米的产品理念。小米公司首创了用互联网模式开发手机操作系统、发烧友参与开发改进的模式。
面试题目
一、
- 请定义这样一个函数
- 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);
来源: