zoukankan      html  css  js  c++  java
  • 实现类似add(1)(2)(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()的值  再计算后面括号的值

  • 相关阅读:
    下载图片
    wx.requestSubscribeMessage
    服务器布置
    网站更换服务器出现加载不了js css文件的问题
    用git创建仓库关联本地项目,又一直上传不上去
    今天发布MVC项目一直找不到页面
    vs nuget找不到包
    vue cli更新
    ExecuteNonQuery()返回受影响行数不适用select语句
    ASP.NET(C#)返回上一页(后退)代码
  • 原文地址:https://www.cnblogs.com/xiaofuxuan-blogs/p/9061151.html
Copyright © 2011-2022 走看看