一道简单的JavaScript面试题
好久没更新博客了,随便写点东西吧。
自从工作之后就特别忙,忙的过程中有时候挺迷茫的,可能是大多数时候写的都是简单的业务代码,很久没好好充电了。最近一直在零碎的上班路上等电梯时间里面学习《图解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面试题的更多相关文章
- 一道简单的 Java 笔试题,但值得很多人反思!
前言 面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问什么深入的技术问题,只问一些广泛的.基础的.我只要 ...
- 一道变态的Javascript面试题
转载http://cymoft.blog.51cto.com/324099/1260099 1 2 3 4 5 6 7 8 9 f = function() {return true;}; g = ...
- 一道简单的HashMap面试题所想到的...
前言 看到一个JDK1.7和JDK1.8中关于HashMap的一个面试题: JDK1.7和1.8中HashMap中链表的插入的方式有什么不同? 原以为自己对HashMap的源码理解的还算可以了,应该足 ...
- 一道简单的IOS面试题-b
题目: (参考:陈曦 包子的iOS开发)我在code review的时候,发现了某个viewController中有这样一段代码,觉得很不妥当,请尝试找出代码中的任何问题,或者可以优化的部分. -(i ...
- 一道简单的python面试题-购物车
要求实现:1.程序开始运行时要求手动填入工资金额2.然后展示一份带有价格的商品列表3.选择某个商品,足够金额购买就添加到购物车,否则提示无法购买4.退出后列出购物车清单 #!/usr/bin/pyth ...
- 一道 JavaScript 面试题
有一道 JavaScript 面试题. f = function () { return true; }; g = function () { return false; }; (function() ...
- 学生问的一道javascript面试题[来自腾讯]
function Parent() { this.a = 1; this.b = [1, 2, this.a]; this.c = { demo: 5 }; this.show = function ...
- 一道简单的面试题,难倒各大 Java 高手!
Java技术栈 www.javastack.cn 优秀的Java技术公众号 最近栈长在我们的<Java技术栈知识星球>上分享的一道 Java 实战面试题,很有意思,现在拿出来和大家分享下, ...
- 你应该知道的25道Javascript面试题
题目来自 25 Essential JavaScript Interview Questions.闲来无事,正好切一下. 一 What is a potential pitfall with usin ...
随机推荐
- springcloud---2
每一个都是独立的springboot工程.通过自己的ip和端口访问. Eureka是服务发现组件,Eureka里面有一个服务注册表,存的是服务消费者和服务生产者的ip和端口.Eureka集群里面每个E ...
- 对称加密与非对称加密,以及RSA的原理
一 , 概述 在现代密码学诞生以前,就已经有很多的加密方法了.例如,最古老的斯巴达加密棒,广泛应用于公元前7世纪的古希腊.16世纪意大利数学家卡尔达诺发明的栅格密码,基于单表代换的凯撒密码.猪圈密码, ...
- 微服务-使用Redis实现分布式缓存
在单体中对于key信息和用户信息是放在内存中放的,通过session进行管理. 微服务是要放在分布式缓存中,以实现服务的无状态化. @Autowired private StringRedisTemp ...
- delegate委托
https://www.cnblogs.com/leicao/p/5251090.html 委托是一种存储函数引用的类型,在事件和事件的处理时有重要的用途 通俗的说,委托是一个可以引用方法的类型,当创 ...
- Hibernate的懒加载session丢失解决方法
在web.xml加入spring提供的过滤器,延长session的生命周期 <!--Hibernate的懒加载session丢失解决方法 --> <filter> <fi ...
- 关于vuex与v-route的结合使用
把vue实际用于项目的过程中遇到过一些问题 1.如何将vuex和vue-route结合使用(接口调用成功回调页面这类等等) 1.初始考虑的方法是在vuex引入vue-router,vuex写一些业务逻 ...
- 爬虫bs4
CSS 选择器:BeautifulSoup4 和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据. lxml 只会 ...
- UIAutomation学习入门
一.界面的自动化操作 .Ui自动化测试 .软件外挂 二.Win32基础知识 a.Win32中一切元素皆窗口,窗口之间有父子关系.整个桌面是一个“根窗口”. b.进程: 根据进程id拿到进程对象Proc ...
- 无法启动此程序,因为计算机丢失MSVCP120.dll
这种错误是由于未安装** vcredist **引起的(而且版本是 2013版):https://www.microsoft.com/zh-CN/download/details.aspx?id=40 ...
- Resource——资源的总结
在xaml中,对于Style.DataTemplate.ControlTemplate.StoryBord等资源,可以放在UserControl.Resource.Windows.Resource.C ...