闭包 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; } } }
这是修改后的最终结果,同时支持 多个数据计算,单个数据计算,数组计算,
此文只是个人学习使用,不足之处,请留言评论,谢谢!!!
阅读全文
0 0
- 闭包 arguments 属性的使用(闭包)
- js 函数的参数 问题 arguments对象 及闭包
- js闭包 属性和方法的使用
- 闭包的使用
- 闭包的使用
- Swift 闭包的使用(尾随闭包)
- 求属性集的闭包和函数依赖的闭包算法(一)
- 求属性集的闭包和函数依赖的闭包算法(二)
- 【数据库】求属性闭包的实现
- 【javascript】高级js--(面向对象js,arguments,闭包,自调)
- js-闭包(closure)&this&arguments对象&懒加载(lazyload)
- Swift 的闭包使用(1)
- JavaScript 闭包的使用
- Swift闭包的使用
- JS闭包的使用
- swift闭包的使用
- Swift 闭包的使用
- Swift闭包的使用
- 九月总结:结束两年左右的工作有感
- 新路程------shell之hi3516 rtc同步
- linux下直接修改压缩包中的内容
- unity中的简单延时方法
- Nodejs 读取中文时乱码问题
- 闭包 arguments 属性的使用(闭包)
- 那些年使用Android Studio碰上的那些事儿
- java单元测试工具 junit
- UVA 10161
- Kotlin笔记一
- android增量更新
- java poi Excel文件导入
- 解构赋值的用途
- java的CyclicBarrier