一道简单的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 ...
随机推荐
- mysql服务解压版的安装(5.7)
推荐博客: https://www.cnblogs.com/LxyXY/p/7708016.html
- 如何用纯 CSS 创作一个跳动的字母 i
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/pZbrpJ 可交互视频 ...
- Linux简单编程学习心得
在Linux环境下简单编程学习心得 linux编程过程 在上周的<信息安全设计基础>的课程学习中学习到了在虚拟的linux环境下简单的编程.学习过程中接触到了vim.gcc和gcd在实验楼 ...
- 试编hello world
这里是一些vim的使用方法: 这时不知道怎么编译了 看了上面的知识 也问了志伟,我就知道了.是要“./hello”就可以了 自己敲了代码,今后也会多试运行,编译,得尽快安装虚拟机了.
- [翻译]理解CSS模块方法
在这个前端发展日新月异的世界,能够找到有所影响的概念相当困难,而将其准确无误的传达,让人们愿意尝试,更是难上加难. 拿CSS来看,在我们写CSS时,工具侧最大的变化,也就是CSS处理器的使用,如:可能 ...
- kali rolling 配置网络
一. 在文件系统里找到/etc/network下的interfaces文件,打开后可以看到eth0为dhcp,将其修改为如下形式: # This file describes the network ...
- Jenkins 集成Ansible教程
前提条件: 1. 部署Jenkins Server 2. 部署 Ansible Server 一.在Jenkins安装SSH插件 系统管理 -> 插件管理 二.在Jenkins 凭证中添加Ans ...
- [洛谷P4918]信仰收集
题目背景 随着各种势力的迁入,守矢神社丧失了不少信仰现在,为了挽回香火日益惨淡的神社,八坂神奈子派遣神社的风祝早苗去人类村落收集信仰 题目描述 你可以将村落看成一个m个点的有向无环图(编号从1−m), ...
- SaltStack应用grains和jinja模板-第四篇
目标需求 1.使用jinja模板让apache配置监听本地ip地址 2.了解grains的基本使用方法 说明:实验环境是在前面的第二篇和第三篇基础上完成 实现步骤 使用grains获取ip地址信息 使 ...
- dp_train_f
Vasya And The Mushrooms 题目大意:有2n个格子,分成上下两行,每行n个,每个格子有蘑菇每秒的生长值(rate),小姑娘从左上角出发(time=0),每秒必须移动,而且只能移动到 ...