转载的一道小米面试题和自己的写法
来源:互联网 发布:中国足球知乎 编辑:程序博客网 时间:2024/06/05 22:50
转载 的一道小米的面试题
写一个函数stringconcat, 要求能
var result1 = stringconcat(“a”, “b”) result1 = “a+b”
var stringconcatWithPrefix = stringconcat.prefix(“hellworld”);
var result2 = stringconcatWithPrefix(“a”, “b”) result2 = “hellworld+a+b”
首先拿到这道题,其实就是一个简单的闭包。然后我就这么写了:
<script type="text/javascript"> window.onload = function() { function stringconcat(a,b){ return a+"+"+b; } //Function.prototype.prefix = function(str){ // function addOne(a,b){ // return str+"+"+stringconcat(a,b); // } // return addOne; //} //注意,这是之前写的,这里这种方式拓展內建函数是不好的。 stringconcat.prefix = function(str){ function addOne(a,b){ return str+"+"+stringconcat(a,b); } return addOne; } var result1 = stringconcat("a","b"); var stringconcatWithPrefix = stringconcat.prefix('helloworld'); var result2 = stringconcatWithPrefix("a","b"); console.log(result1); console.log(result2); } </script>
然后一看结果,对了。然后我又回去看了一下原博主的答案,发现自己的写法真的好low - -!
一下是原博主的写法(为了方便大家观看,我调整了一下函数的顺序)
function stringconcat() { var result = []; stringconcat.merge.call(null, result, arguments); //自身调用merge方法 ,就这道面试题来说 这里 resul =[a,b]。 return result.join("+"); //这里将数组拼接成字符串 "a+b" } stringconcat.merge = function(array, arrayLike) { //这里给stringconcat添加了一个merge方法 var i = 0; for(i = 0; i < arrayLike.length; i++) { array.push(arrayLike[i]); // 在本题中这里的作用是将內建变量arguments里面的元素全部搬到自己的数组里面 } } stringconcat.prefix = function() { //又为stringconcat添加了一个方法 var _arguments = [], _this = this; // 放回stringconcat _this.merge.call(null, _arguments, arguments); return function() { //闭包返回一个函数。 var _args = _arguments.slice(0); // 这里只取第一个元素,也就是stringconcat.prefix的第一个参数 _this.merge.call(null, _args, arguments); return _this.apply(null, _args); // call()与apply()方法类似 }; };
为了方便大家阅读呢,我在原博主的代码的基础上添加了自己理解的注释,由于自身知识浅薄,可能在理解上有错误,欢迎大家斧正。
两个版本的比较:
当然是我写的那个low啦。至于low在哪里:
首先是在stringconcat这个函数中,我只考虑了两个参数的情况,在本题中也就是a,b。
如果在实际开发中成百上千个,我想我就吃不消了,而且在参数传入的写法上我也欠缺考虑,如果使用函数的人传入的不是一个一个的参数,而是一个数组,那么我写的那个就GG了。
第二个low点,就是在stringconcat.prefix方法中,我忘了考虑使用的人误操作,或者恶意操作的情况,在题目中它要的是第一个参数。而我写的时候和调试的时候也只会写一个参数。但是万一使用的人不是我,填写了很多的实参,我想也得不到想要的结果。。。。。
至于面向对象和面向过程在这道题目里面优势不明显
原博主出处http://www.cnblogs.com/iyangyuan/p/4119166.html
0 0
- 转载的一道小米面试题和自己的写法
- 小米面试题树的高度
- 转载的一道编程试题
- 转载:解答Google的一道面试题
- 自己做的一道机试题
- 小米面试题:N对括号的所有合法状态
- 并查集(小米面试题求朋友圈的个数)
- 一道经典的sql面试题不同的写法
- 小米面试题
- 从一道小米面试题看并查集
- 并查集和(小米面试题)
- 转载:一道常被人轻视的前端js面试题
- 关于char和int的一道试题
- 某公司的一道试题
- 小米面试题 从一个字符串中删除在另一个字符串中出现的字符
- 【小米面试题】-给定一个具体时间,计算时针与分针之间的角度
- 转载 一道面试题
- MakeFile 的写法(转载)
- Assign Cookies
- 欢迎使用CSDN-markdown编辑器
- Android开发galleryfinal裁剪png图片问题
- 分类算法之朴素贝叶斯分类(Naive Bayesian classification)
- 实现strcpy函数
- 转载的一道小米面试题和自己的写法
- 海量数据处理算法—Bloom Filter
- 最大流问题:增广路径算法的比较
- 关于360笔试题的一个题目的以下代码执行后输出结果为()思考
- iOS中的转场动画
- 利用腾讯云1元机和服务市场wordpress快速搭建个人博客
- 创建型模式
- 图片转web字体库,如何制作web字体库
- Bit Map算法简介