前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >两道函数式编程题

两道函数式编程题

作者头像
meteoric
发布2018-11-15 16:57:13
4170
发布2018-11-15 16:57:13
举报
文章被收录于专栏:游戏杂谈游戏杂谈

题目是由Winter出的,出片在这里>>

Winter出的题,有些我也答不上来,题目难度并不是很高,但还考的比较深入。例如:

JavaScript中的科里化、尾递归及其优化等(因为工作中用到这些的地方并不多)

之前我也整理过,叫《网上收集的十道题》,那些题目,如果只是日常的页面开发,有些也许不会遇到,但如果想深入JavaScript,去研究一下也未尝不是一件好事情。

我所了解的招聘前台开发人员,不同的公司以及部门对前台开发的技能要求会各有所异。

打个比方:(需要熟练掌握如下技能的:切图、XHTML、CSS、JavaScript)的前端开发的公司会问:Web标准、函数式、设计模式、OO、浏览器兼容性以及hasLayout的问题,进(以JavaScript开发为主导的,平时较少需要进行页面切割)的公司,算法是一定会考的,其中编写的JavaScript脚本它的性能和优化问题,CDN、http相关也会问,但这些公司都会问同一个问题:跨域如何处理,方案有哪些,如何选择?

部门、产品需要什么样的人,考察的侧重点会有所不同。但既然是写代码,基本的一些算法还是要会一点,性能优化这个也是很重要的。即使如此,对于编写人员,有些能力也是比较重要的:测试、运营、业务、需求、网络协议等,这些是对某一门开发语言掌握之后附加的能力(过早的涉入可能容易分散对某一门开发语言学习的精力),如果想提升自己的综合能力,上面那些会越来越重要。

只试着解答两道题:

1、写一个函数式风格的菲波纳契数列。

2、写一个函数式风格的快速排序。

第一题:

之前写过,是使用了三种方法:递归、数组缓存、加法,有兴趣可以看这里>>

代码语言:javascript
复制
1: var IterMemoFib = function() { 

       2:     var cache = [1, 1]; 

       3:     return function (n) { 

       4:         if (n >= cache.length) { 

       5:             for (var i = cache.length; i < n ; i++ ) { 

       6:                 cache[i] = cache[i - 2] + cache[i - 1]; 

       7:             } 

       8:         } 

       9:         return cache[n - 1]; 

      10:     } 

      11: }();

第二题:

代码语言:javascript
复制
1: <script type="text/javascript">

       2:     var arr = [1, 3, 5, 7, 9, 10, 20, 50, 760, 3, 8];

       3:  

       4:     function ASC(a, b) {

       5:         return a - b;

       6:     }

       7:  

       8:     function DES(a, b) {

       9:         return b - a;

      10:     }

      11:  

      12:     alert(arr.sort(ASC));

      13: </script>

不过winter出的另外几道题还是比较有意思的,不注意的话容易掉陷阱里去

代码语言:javascript
复制
1: <script type="text/javascript">

       2: var proto = {a:1};

       3: function cls() {};

       4: var obj1 =  new cls();

       5: cls.prototype = proto;

       6: //obj1.a现在是什么?

       7: </script>

注意这里使用的是“=”赋值,等价于cls.prototype = {a:1};

所以obj1.a === undefined

稍微变换一下:

代码语言:javascript
复制
1: <script type="text/javascript">

       2:  function cls() {};

       3: var obj1 =  new cls();

       4: cls.prototype.a = 1;

       5: //obj1.a现在是什么?

       6: </script>

这个时候就不一样了,此时obj1从cls的原型上继承了属性’a’,那么obj1.a值就为1了

两者的区别因为形式不同,而导致的意义也完全不一样:

cls.prototype.a = 1;     cls.prototype = {a:1}

还有一题:

Function.prototype.ex = function() {                         this.call(arguments);                 }                 请编写一段代码,调用ex方法,但不能出现Function.prototype,说明其中this代表哪个对象

编写的代码如下:

代码语言:javascript
复制
1: <script type="text/javascript">

       2: Function.prototype.ex = function() {

       3:     this.call(arguments);

       4: }

       5:  

       6: function abc() {

       7:     alert(this.length);

       8: }

       9:  

      10: abc.ex(1, 2, 3, 4, 5);

      11: </script>

this.call这段代码中,第一个参数是arguments(‘伪’数组,是方法执行时传递的实参集合),如果某个函数使用.ex进行调用,函数内使用this将会指向参数集合(arguments),this.length则为实参的个数,this指向了调用时的实参集合(arguments)

有空要折腾一下算法和FP了…

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011-03-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
内容分发网络 CDN
内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档