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

来源:互联网 发布:手机网络的图标怎么换 编辑:程序博客网 时间:2024/05/19 15:43

仔细看了下,稍微简化了下最终代码
写出一个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;               }           }       }

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

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

原创粉丝点击