实现如下语法的功能:var a = add(2)(3)(4); //9
2017-03-29 00:04
232 查看
从汤姆大叔的博客里看到了6个基础题目:本篇是第6题 - 实现如下语法的功能:var a = add(2)(3)(4); //9
解题关键:add()函数需要返回一个加法函数,而不是一个普通的值,即定义add(),并想办法让add()返回一个add()。js最显著的特征就是函数的返回值可以是一个函数。
实现办法:
第1步:在add()体内定义一个fn,该fn返回一个add()。add传递第1个加数,fn传递第2个加数,返回add时,将两个加数之和传递给add,这样就实现了累加。
第2步:定义add()的返回值为fn
如此一来,就变成了add返回fn,而fn又返回了add,这就是变相的add返回add!如下是代码:
运行查看,并没有输出我们预期的结果3,而是输出了 fn 这个函数的定义代码。为什么会这样?不用想太多,本身就是这样。因为add返回的是一个函数,并非一个具体的值,所以输出add时,自然就得到了这段定义的代码。那么如何才能得到我们要的那个值呢?
回看fn函数的定义,它返回的是一个add函数,并将a+b的值作为add的参数,那么时此的add的参数,不正就是累加的总和吗?(请仔细思考)换句话说,就是add中的a,总是保存着累加的和。那我们要如何得到这个值呢?
js中console.log一个对象时,会对这个对象进行toString()操作,还有些情况会对对象进行valueOf()操作,那么我们只要让fn的toString()和valueOf()返回的是a的值就可以解决问题,代码如下:
以上代码中的问题1和问题2请仔细思考,此处不详解!
本题解答完毕!
解题关键:add()函数需要返回一个加法函数,而不是一个普通的值,即定义add(),并想办法让add()返回一个add()。js最显著的特征就是函数的返回值可以是一个函数。
实现办法:
第1步:在add()体内定义一个fn,该fn返回一个add()。add传递第1个加数,fn传递第2个加数,返回add时,将两个加数之和传递给add,这样就实现了累加。
第2步:定义add()的返回值为fn
如此一来,就变成了add返回fn,而fn又返回了add,这就是变相的add返回add!如下是代码:
function add(a) { var fn = function(b) { return add( a+b ); //fn返回的是add函数,并将a与b相加的值传递给add,实现累加 } return fn; } var t = add(1)(2); console.log( t );
运行查看,并没有输出我们预期的结果3,而是输出了 fn 这个函数的定义代码。为什么会这样?不用想太多,本身就是这样。因为add返回的是一个函数,并非一个具体的值,所以输出add时,自然就得到了这段定义的代码。那么如何才能得到我们要的那个值呢?
回看fn函数的定义,它返回的是一个add函数,并将a+b的值作为add的参数,那么时此的add的参数,不正就是累加的总和吗?(请仔细思考)换句话说,就是add中的a,总是保存着累加的和。那我们要如何得到这个值呢?
js中console.log一个对象时,会对这个对象进行toString()操作,还有些情况会对对象进行valueOf()操作,那么我们只要让fn的toString()和valueOf()返回的是a的值就可以解决问题,代码如下:
function add(a) { var fn = function(b) { return add( a+b ); //fn返回的是add函数,并将a与b相加的值传递给add } fn.toString = fn.valueOf = function() { return a; // 1为什么返回a? // 2为什么定义fn.toString而不是add.toString? } return fn; } var t = add(1)(2); console.log( t );
以上代码中的问题1和问题2请仔细思考,此处不详解!
本题解答完毕!
相关文章推荐
- 用 Javascript 实现如下语法的功能:var a = add(2)(3)(4); //9
- 实现如下语法的功能:var a = (5).plus(3).minus(6); //2
- 关于Apache mod_rewrite的中文配置、使用和语法介绍(实现URL重写和防盗链功能)
- 关于Apache mod_rewrite的中文配置、使用和语法介绍(实现URL重写和防盗链功能)
- 利用Swift之协议语法实现页面间的传值功能
- python中实现php的var_dump函数功能
- 关于Apache mod_rewrite的中文配置、使用和语法介绍(实现URL重写和防盗链功能)
- 许多网站都成为灰色,要实现这个功能,只要在css里添加如下即可
- 简单的实现计算机功能代码如下
- 创建一个如下的窗体,并在窗体上放置colorDialog控件。实现功能:1)程序运行时,单击打开颜色对话框按钮,可选择颜色,并以所选颜色作为窗体背景色
- 如何在火狐里面实现如下功能
- 使用原生JS实现jQuery的addClass, removeClass, hasClass函数功能
- 能用软件实现如下功能吗 ?
- javascript实现Date的addDays功能
- 猜测功能实现方案 之 IE右键菜单——Add To Evernote
- Java菜鸟学习笔记--语法篇(一):用Math.random()实现验证码功能
- 怎么才能使得DATAGRIDVIEW实现如下图的功能?
- C#中使用repeater控件实现List的clear,add,update,delete功能之二数据库
- 使用JS实现jQuery的addClass, removeClass, hasClass函数功能
- RecyclerView中实现addHeaderView,addFooterView功能