好久没更新博客了,随便写点东西吧。

自从工作之后就特别忙,忙的过程中有时候挺迷茫的,可能是大多数时候写的都是简单的业务代码,很久没好好充电了。最近一直在零碎的上班路上等电梯时间里面学习《图解HTTP 》,觉得还是很有收获的。

最近一直在一边忙项目一边帮公司面试招新的前端工程师,算一算面试了很多为应聘者了,有刚刚毕业的大学生,有出来工作几年了中途转行做前端的社会人,不过总体来说并没有碰到另自己满意的人,很多虽然简历上写着已经有几个项目的经验,不过对于基础的JavaScript知识的掌握还是不够,就连如何判断一个变量是数组还是对象都很多人没写出来。本来想记一下今天工作上发生的一件事,写到这里想了想,还是不写那些没啥营养的东西了,今天咱们来说一道平时我都会用来考面试者的题吧,先说明:此题并不是我原创,而是我在腾讯的面试题上面借鉴过来,侵删。

编写一个函数 f , f 的用法如下

f(1).value //返回  1
f(1)(2).value //返回 5
f(1)(2)(3).value //返回 14

其实这道理是特别简单的一道题,逻辑思维稍微好点的都可以看得出,这其实就是参数的平方相加:

1 * 1 === 1
1 * 1 + 2 * 2 === 5
1 * 1 + 2 * 2 + 3 * 3 === 5

单从 f(1).value 可以看出,可能有些同学会以为 f(1) 返回的是 {value:1} ,所以导致他们看到 f(1)(2).value 的时候就迷惑了,为什么 f(1) 后面还可以加括号?

其实熟悉JavaScript的人都知道,在JavaScript的世界里,一切皆对象,所以函数也不例外,也是一个对象来的,所以下面的代码完全是可以执行的:

var fun = function(){};
fun.value = 1;  

显而易见,f(1) 返回的其实是一个函数(姑且用 fun 代替),fun 可以接收一个参数,fun 的主体是再返回一次函数 f ,不过会把第一次执行的 f 的参数的平方传入 fun 中的 f 的第二个参数 ;然后函数 fun 还有一个value的属性,而这个value的值就是等于函数 f 的参数的平方加上第二个参数(因为第二个参数等于前一个函数 f 的参数的平方,如果没有前一个函数则默认为零)。好吧,我承认这句话可能阐述得比较绕,大家直接看代码比较清楚:

function f(val,tamp=0){
val = val*val+tamp;
var fun = function(val2){
return f(val2,val);
}
fun.value = val;
return fun;
}

总结:是不是一下子觉得这道题其实很简单。其实这道题设置的一个知识点就是函数柯里化。这是一种比较好用的函数,可能各位同学在日常的开发中都会用到过,不过很有可能不知道这种函数的存在。更详细的内容各位同学自行Google吧。

《转载需标明出处》

一道简单的JavaScript面试题的更多相关文章

  1. 一道简单的 Java 笔试题,但值得很多人反思!

    前言 面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问什么深入的技术问题,只问一些广泛的.基础的.我只要 ...

  2. 一道变态的Javascript面试题

    转载http://cymoft.blog.51cto.com/324099/1260099 1 2 3 4 5 6 7 8 9 f = function() {return true;};  g =  ...

  3. 一道简单的HashMap面试题所想到的...

    前言 看到一个JDK1.7和JDK1.8中关于HashMap的一个面试题: JDK1.7和1.8中HashMap中链表的插入的方式有什么不同? 原以为自己对HashMap的源码理解的还算可以了,应该足 ...

  4. 一道简单的IOS面试题-b

    题目: (参考:陈曦 包子的iOS开发)我在code review的时候,发现了某个viewController中有这样一段代码,觉得很不妥当,请尝试找出代码中的任何问题,或者可以优化的部分. -(i ...

  5. 一道简单的python面试题-购物车

    要求实现:1.程序开始运行时要求手动填入工资金额2.然后展示一份带有价格的商品列表3.选择某个商品,足够金额购买就添加到购物车,否则提示无法购买4.退出后列出购物车清单 #!/usr/bin/pyth ...

  6. 一道 JavaScript 面试题

    有一道 JavaScript 面试题. f = function () { return true; }; g = function () { return false; }; (function() ...

  7. 学生问的一道javascript面试题[来自腾讯]

    function Parent() { this.a = 1; this.b = [1, 2, this.a]; this.c = { demo: 5 }; this.show = function ...

  8. 一道简单的面试题,难倒各大 Java 高手!

    Java技术栈 www.javastack.cn 优秀的Java技术公众号 最近栈长在我们的<Java技术栈知识星球>上分享的一道 Java 实战面试题,很有意思,现在拿出来和大家分享下, ...

  9. 你应该知道的25道Javascript面试题

    题目来自 25 Essential JavaScript Interview Questions.闲来无事,正好切一下. 一 What is a potential pitfall with usin ...

随机推荐

  1. MyEclipse 2014优化设置(禁用myeclipse updating indexes)

    1.指定本机java环境 Windows-->preferences-->java-->Insetallel JREs 右侧 单击ADD standard VM-->Next ...

  2. 如何用纯 CSS 创作单元素点阵 loader

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览.https://codepen.io/comehope/pen/YvBvBr 可交互视频 此 ...

  3. 20145312 《Java程序设计》第九周学习总结

    20145312 <Java程序设计>第九周学习总结 学习笔记 Chapter 16整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 SUN公司为了简化.统一对数据库的操作, ...

  4. 20145321 《Java程序设计》第8周学习总结

    20145321 <Java程序设计>第8周学习总结 教材学习内容总结 第十五章 时间与日期 15.1 日志 1.使用日志的起点是Logger类,要取得Logger类,必须使用Logger ...

  5. mysql增加远程访问

    grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

  6. tiny4412的烧录工具minitool安装【学习笔记】

    烧录了半天,在win10下一直就是烧录不进去,但是在Ubuntuh环境却可以,找了很久终于找到了,原来在win10安装minitool驱动的时候没有注意到报了错误,错误内容是驱动的数字签名问题,后来禁 ...

  7. linux之磁盘配额(quota)使用方法(转)

    1.什么是quota 简单的说就是限制用户对磁盘空间的使用量. 因为Linux是多用户多任务的操作系统,许多人共用磁盘空间,为了合理的分配磁盘空间,于是就有了quota的出现. 2.quota的用途  ...

  8. Feign PathVariable annotation was empty on param 0.

    使用Feign的时候,如果参数中带有 @PathVariable形式的参数,则要用value=""标明对应的参数,否则会抛出IllegalStateException异常 如 @P ...

  9. git pull 分支问题

    问题: 是因为本地分支与远程分支没有链接关系, 让他们建立链接关系

  10. 使用IP spoofer 功能

    有个问题请教:使用IP spoofer 功能后,很多vuser都会挂掉,这个怎么解决呢? LR