一到递归??的js题
来源:互联网 发布:笔记本预装linux 编辑:程序博客网 时间:2024/05/23 16:38
前两天一位朋友发邮件问了我关于这道经典的面试题,其实在这位朋友给我发邮件之前曾经也有人给我发过邮件询问过此类笔试题,思前想后觉得写出来给那些还正在解答此题中的朋友们。
题的原型:
var add = function (m) { var temp = function (n) { return add(m + n); } temp.toString = function () { return m; } return temp;};add(3)(4)(5); // 12add(3)(6)(9)(25); // 43
这个add函数可以无限次调用循环调用,并且把所有传进去的值相加,最后返回相加总数。这道题咋一看有点特别,但代码量极其少而精,重点技术在于:作用域、交替、匿名函数、toString的巧妙。
让我们来解释这个过程:add(3)(4)(5)
1、先执行add(3),此时m=3,并且返回temp函数;
2、执行temp(4),这个函数内执行add(m+n),n是此次传进来的数值4,m值还是上一步中的3,所以add(m+n)=add(3+4)=add(7),此时m=7,并且返回temp函数
3、执行temp(5),这个函数内执行add(m+n),n是此次传进来的数值5,m值还是上一步中的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的重写只是为了函数不执行时能够返回最后运算的结果值,所以这个地方是可以任意修改的,你让它返回什么它就返回什么,比如改写:
temp.toString = function () { return "total : " + m;}
执行结果:
add(3)(4)(5);
total : 12
0 0
- 一到递归??的js题
- js计算--一递归
- 递归到非递归的转换
- 一:js高级编程之:递归
- js递归的优化(尾递归)
- 【Code】Js-mind插件中会使用到的一个递归拼装数据格式的函数
- 递归(一)几个简单的递归例子
- 递归题一
- 一题php递归
- vue.js树的递归
- 一例递归的使用
- 递归的应用(一)
- 递归的应用实战一
- 递归模式的思考(一)
- 树 递归的方法(递归到N极)
- 从阶乘递归到subset题解的递归思想扩展
- js 递归
- js递归
- 去除单链表中的重复元素
- Singleton的性感你了解多少?
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- iReport自定义快捷键
- 数据结构与算法(七):常见数据结构与算法概括
- 一到递归??的js题
- 事件拦截机制分析
- C# 委托-lambda表达式
- android-secheme简单分享
- ios 关于如何调整cell.imageView中的ImageView大小及位置
- Linux下搭建java环境
- 70. Climbing Stairs
- Uber三个鸡肋漏洞的妙用
- 完整java开发中JDBC连接数据库代码和步骤