闭包 arguments 属性的使用(闭包)

1 篇文章 0 订阅

仔细看了下,稍微简化了下最终代码
写出一个text函数,并实现以下效果
text(1,2); 输出 3
text(1)(2); 输出 3
text(1,2)(3); 输出 6
text(1,2)(3,4);输出 10

声明一个text函数,先对arguments参数的数量进行判断,然后再返回出一个函数,返回函数里再对arguments参数的数量进行判断进行返回输出

调用text() 只支持单个参数

function text(){
    //false 默认值是0,true 默认数字值是 1,如果不给num赋值的话 无法计算,始终输出 NaN
           var num=false;
           if(arguments.length<=1){
               num+=arguments[0];
               return function(){
                   if(arguments.length<=1){
                       return num+arguments[0];
                   }else{
                       for(var i=0;i<arguments.length;i++){
                           num+=arguments[i];
                       }
                       return num;
                   }
               }
           }else{
               for(var i=0;i<arguments.length;i++){
                   num+=arguments[i];
               }
               return num;
           }

       }

这里写图片描述

下面对它进行一些改进,让它支持多个参数。其实就只是在text函数的else里面加了一个返回函数

function text(){
           var num=false;
           if(arguments.length<=1){
               num+=arguments[0];
               return function(){
                   if(arguments.length<=1){
                       return num+arguments[0];
                   }else{
                       for(var i=0;i<arguments.length;i++){
                           num+=arguments[i];
                       }
                       return num;
                   }
               }
           }else{
               for(var i=0;i<arguments.length;i++){
                   num+=arguments[i];
               }
               return function(){
                   if(arguments.length==0)return num;
                   for(var i=0;i<arguments.length;i++){
                           num+=arguments[i];
                   }
                   return num;
               }
           }

       }

这里写图片描述

也许这样你会觉得一次传入多个参数,不是很笨重吗,我直接传个数组不就好了。有道理,咱们再对它进行下改进

function text(){
           var num=false;
           for(var i=0;i<arguments.length;i++){
               if((typeof arguments[i])!='number' && (typeof arguments[i])!='object'){
                   throw '参数不正确,请检查传入参数是否为number或array';
               }
           }
           if(arguments.length<=1){
               if((typeof arguments[0])=='number'){
                   num+=arguments[0];
                   return function(){
                       for(var i=0;i<arguments.length;i++){
                           if((typeof arguments[i])!='number' && (typeof arguments[i])!='object'){
                               throw '参数不正确,请检查传入参数是否为number或array';
                           }
                       }
                       if(arguments.length<=1){
                           if((typeof arguments[0])=='number'){
                               return num+arguments[0];
                           }else{
                               for(var i=0;i<arguments[0].length;i++){
                                   num+=arguments[0][i];
                               }
                               return num;
                           }

                       }else{
                           for(var i=0;i<arguments.length;i++){
                               num+=arguments[i];
                           }
                           return num;
                       }
                   }
               }else{
                   for(var i=0;i<arguments[0].length;i++){
                       num+=arguments[0][i];
                   }
                   return function(){
                       for(var i=0;i<arguments.length;i++){
                           if((typeof arguments[i])!='number' && (typeof arguments[i])!='object'){
                               throw '参数不正确,请检查传入参数是否为number或array';
                           }
                       }
                       if(arguments.length<=1){
                           if((typeof arguments[0])=='number'){
                               return num+arguments[0];
                           }else{
                               for(var i=0;i<arguments[0].length;i++){
                                   num+=arguments[0][i];
                               }
                               return num;
                           }

                       }else{
                           for(var i=0;i<arguments.length;i++){
                               num+=arguments[i];
                           }
                           return num;
                       }
                   }
               }

           }else{
               for(var i=0;i<arguments.length;i++){
                   num+=arguments[i];
               }
               return function(){
                   if(arguments.length==0)return num;
                   for(var i=0;i<arguments.length;i++){
                       if((typeof arguments[i])!='number' && (typeof arguments[i])!='object'){
                           throw '参数不正确,请检查传入参数是否为number或array';
                       }
                   }
                   for(var i=0;i<arguments.length;i++){
                       num+=arguments[i];
                   }
                   return num;
               }
           }

       }

这是修改后的最终结果,同时支持 多个数据计算,单个数据计算,数组计算,
这里写图片描述

此文只是个人学习使用,不足之处,请留言评论,谢谢!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值