博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现类似add(1)(2)(3)的效果
阅读量:5133 次
发布时间:2019-06-13

本文共 1111 字,大约阅读时间需要 3 分钟。

浏览网页时,突然看到这样一道题,实现add(1)(2)(3)(4)=10这样的效果。

一般来说 fn()()这样的格式是会报错的,要想这个函数能执行 add()(),可以很快的想到当add()返回一个函数时,可以达到这样的效果。

1 function add(){2 3     function temp(){}4     5     return temp;6 }
View Code

然后返回tmp保证了第二次调用的是tmp函数,后面的计算都是在调用tmp, 因为tmp也是返回的自己,保证了第二次之后的调用也是调用tmp,而在tmp中将传入的参数与保存在作用链中x相加并付给sum,这样就保证了计算;

1  function add(x){ 2             var sum=x; 3             function temp(y){ 4                 console.log("y:"+y); 5                 sum+=y; 6                 console.log(sum) 7  8             } 9             return temp;10         }
View Code

这样返回temp的话就不能够获取到sum的数值了,而我们又知道,当打印时,会调用他的tostring或valueof 方法  ,因此我们可以自己改写它的tostring方法,从而获得sum值

1 function add(x){ 2             var sum=x; 3             function temp(y){ 4                 console.log("y:"+y); 5                 sum+=y; 6                 return temp; 7             } 8             temp.toString=function(){ 9                 return sum;10             }11             return temp;12         }
View Code

这时候就可以实现add()()()这样不限制参数个数的效果了,如果想实现add()不定项参数的话,可以考虑用arguments计算出add()的值  再计算后面括号的值

 

转载于:https://www.cnblogs.com/xiaofuxuan-blogs/p/9061151.html

你可能感兴趣的文章
Django中Celery简介
查看>>
hadoop之转载
查看>>
AOP面向方面编程
查看>>
ob_start()函数
查看>>
【JS笔记】5.1 Object类型
查看>>
【BZOJ4025】二分图(可撤销并查集+线段树分治)
查看>>
uml的图与代码的转换——类图
查看>>
吞吐量(TPS)、QPS、并发数、响应时间(RT)概念
查看>>
MVVM 下 ContextMenu的命令绑定
查看>>
GIS基础软件及操作(五)
查看>>
SQLSERVER使用密码加密备份文件以防止未经授权还原数据库
查看>>
C#不登录电脑启动程序
查看>>
ASP.NET缓存中Cache过期的三种策略
查看>>
6天通吃树结构—— 第一天 二叉查找树
查看>>
理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用
查看>>
Windows 8实例教程系列 - 布局控制
查看>>
章节2:SQL之多表连接
查看>>
silverlight下多线程处理
查看>>
如何使用ITEXTSHARP将HTML代码字符串写进PDF
查看>>
git bash 出现vim的时候怎么退出
查看>>