文档章节

一道经典的JavaScript面试题

大头儿子程序猿
 大头儿子程序猿
发布于 2017/04/25 09:47
字数 544
阅读 3
收藏 0

前两天一位朋友发邮件问了我关于这道经典的面试题,其实在这位朋友给我发邮件之前曾经也有人给我发过邮件询问过此类笔试题,思前想后觉得写出来给那些还正在解答此题中的朋友们。

题的原型:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

var add = function (m) {

 

    var temp = function (n) {

        return add(m + n);

    }

 

    temp.toString = function () {

        return m;

    }

 

    return temp;

};

 

 

add(3)(4)(5); // 12

add(3)(6)(9)(25); // 43

 

这个add函数可以无限次调用循环调用,并且把所有传进去的值相加,最后返回相加总数。这道题咋一看有点特别,但代码量极其少而精,重点技术在于:作用域、交替、匿名函数、toString的巧妙

让我们来解释这个过程:add(3)(4)(5)

1、先执行add(3),此时m=3,并且返回temp函数;

2、执行temp(4),这个函数内执行add(m+n)n是此次传进来的数值4m值还是上一步中的3,所以add(m+n)=add(3+4)=add(7),此时m=7,并且返回temp函数

3、执行temp(5),这个函数内执行add(m+n)n是此次传进来的数值5m值还是上一步中的7,所以add(m+n)=add(7+5)=add(12),此时m=12,并且返回temp函数

4、关键性一步来了,后面没有传入参数,等于返回的temp函数不被执行而是打印,了解JS的朋友都知道对象的toString是修改对象转换字符串的方法,因此代码中temp函数的toString函数return m值,而m值是最后一步执行函数时的值m=12,所以返回值是12

看到这其实就很明白了,代码中temp.toString的重写只是为了函数不执行时能够返回最后运算的结果值,所以这个地方是可以任意修改的,你让它返回什么它就返回什么,比如改写:

1

2

3

temp.toString = function () {

    return "total : " + m;

}

执行结果:

1

2

>>> add(3)(4)(5);

total : 12

 

© 著作权归作者所有

共有 人打赏支持
大头儿子程序猿
粉丝 0
博文 20
码字总数 3454
作品 0
奉贤
程序员
太原面经分享:如何用js实现返回斐波那契数列的第n个值的函数

面试攒经验,let's go! 值此高考来临之际,闲不住的我又双叒叕出发去面试攒经验了,去了公司交待一番流程后,面试官甩给了我一张A4纸,上面写着一道js算法笔试题(一开始我并不知道这是在考...

闰土大叔
06/07
0
0
从一道执行题,了解Node中JS执行机制

与浏览器环境有何不同 node环境和浏览器环境,表现出来的事件循环状态,大体表现一致 唯一不同的是: JS引擎存在 monitoring process 进程,会持续不断的检查主线程执行为空,一旦为空,就会...

COC马里奥
06/05
0
0
如何用JavaScript实现2+2=5?

我大学毕业找工作时,经常做一些稀奇古怪的面试题。这不,给大家分享一道整蛊的面试题,它其实不能算一道正式的面试题,大家可以用它来捉弄你们那些程序员朋友。 题目:如何用JavaScript实现...

jerrywangsap
08/18
0
0
前端面试&笔试&错题指南(三)

JavaScript排坑指南(三) JavaScript总是给人以惊喜,学习不止,进步不断,今天继续补充JS容易搞错的几道笔试/面试题,为了秋招继续努力,欢迎一起为秋招努力的小伙伴共勉 ------------------...

Vincent Ko
08/12
0
0
【吐血整理】前端求职面试资源分享,值得收藏!

面试不是单纯考察技术,而是综合能力的考查,关于面试,职位JD怎么看,知识点怎么复习,问题如何回答,项目怎么准备,和负责人如何沟通,怎么给HR留下良好印象……别小瞧这些问题,往往就是这...

慕课网官方_运营中心
07/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

deepin系统使用deepin-wine安装exe程序

deepin自带原生deepin-wine使用命令如下: deepin-wine QQMusicSetup.exe deepin-wine的程序位置: /root/.wine 默认安装的QQ浏览器快捷方式位置: /root/.wine/drive_c/'Program Files'/Te...

临江仙卜算子
38分钟前
1
0
快速get到学习Linux操作系统的点

快速get到学习Linux操作系统的点 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux能够运行主要的UNIX工具软件...

linuxCool
44分钟前
2
0
聊聊:Linux分区的那些方案

安装linux的整体步骤其实比较简单,唯一可能值得说明的地方,大概就是linux的分区了。 下面来给大家推荐一些分区方案。 1 分两个区 实际上,很多时候我们只需要分两个区:`/`和交换分区,日常...

Linux就该这么学
55分钟前
1
0
适配器模式和外观模式

适配器模式: 将一个类的接口,转换成客户期望的另一个接口。适配器让原本不兼容的类可以合作无间。 例子: //将Enumeration转换成Iteratorpublic class EnumerationIterator implements Iter...

王怀楼
57分钟前
2
0
7-CXF与Spring整合发布webservice

Spring+CXF整合来管理webservice 实现步骤: 1. 添加cxf.jar 包(集成了Spring.jar、servlet.jar ),spring.jar包 ,servlet.jar 包 2. 编写业务类,通过CXF来发布webservice 员工管理: 方法...

江戸川
59分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部