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

自从工作之后就特别忙,忙的过程中有时候挺迷茫的,可能是大多数时候写的都是简单的业务代码,很久没好好充电了。最近一直在零碎的上班路上等电梯时间里面学习《图解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. imx6q android 添加开机启动脚本

    1.在xx/out/target/product/sabresd_6dq/root/init.rc中添加以下内容 ========================================== ...

  2. Jquery编历数组

    <html> <head> <title>编历</title> <script type="text/javascript"& ...

  3. 20145329 《Java程序设计》第三周学习总结

    教材学习内容总结 java并非完整的面向对象程序语言 定义 1:class:定义类 2.char:类型声明变量 3.new:新建对象 4.名称 X:参考 5.=:可用于指定参考至新建变量 6.构造函数 ...

  4. Spring Security核心概念介绍

    Spring Security是一个强大的java应用安全管理库,特别适合用作后台管理系统.这个库涉及的模块和概念有一定的复杂度,而大家平时学习Spring的时候也不会涉及:这里基于官方的参考文档,把 ...

  5. 【前端】jQuery实现锚点向下平滑滚动特效

    jQuery实现锚点向下平滑滚动特效 实现效果: 实现原理: 使用jQuery animate()方法实现页面平滑滚动特效 $('html, body').animate({scrollTop: $( ...

  6. slf4j日志框架绑定机制

    一.环境搭建 我们以log4j为例,探寻slf4j与log4j的绑定过程. 1.Java类 public class Slf4jBind { public static void main(Strin ...

  7. 素数分布 - nefu 117

    素数个数的位数 - nefu 117 普及一个公式: 位数公式:要求一个数x的位数,用公式:lg(x)+1 素数分布:n/ln(n) 所以直接求解n/ln(n)的位数就可以了 代码如下: #inclu ...

  8. 自学Java测试代码 - 简单地Student类

    2017-08-23  23:45:38 writer:pprp 写这个还蛮开心的 package test; public class Student { //创建成员变量 String name ...

  9. 获取远程html

    /// <summary> /// 获取远程html /// </summary> /// <param name="url"></par ...

  10. Memcached stats items 命令

    Memcached stats items 命令用于显示各个 slab 中 item 的数目和存储时长(最后一次访问距离现在的秒数). 语法: stats items 命令的基本语法格式如下: sta ...