javascript 小实例,求和的方法sumFn
新年第一记,从这里开始,先来个简单的!去年的知识梳理留下了很多尾巴,原因有很多(知识储量不足,懒了,项目多...) lg:都是借口~ 好吧,我承认,这都是借口,今年一定把尾巴清干净!
下面要写的是知识梳理的第一个案例:
- 写一个求和的方法sumFn,不管传递的参数有什么,都能将最终的和算出来,并且返回给函数外部使用。(要求:一个参数都不传默认结果为0,对于传递的非正常数字的参数不与累加操作);
这个案例主要要考察的知识点是 arguments 参数,来给个特写,什么意思呢?
arguments 参数是一个比较特殊的对象,是当前函数的一个内置属性,它非常想Array,但却不是Array lg:说的什么,还是不懂~ 额,好吧,例子胜过一切雄辩,咱们举几个栗子来看看:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function abc(a,b,c){ //看看arguments是什么 console.log(arguments); } abc(1,2,3) ; //[1,2,3] 这不是数组吗 function abc(a,b,c){ //看看arguments是什么类型的 console.log( typeof arguments) } abc(1,2,3) ; //object 这是对象,不是数组 |
看看,是不是有点意思,似数组非数组 lg:那它怎么用呢~ 这个问题问的好,看下面代码:
1 2 3 4 5 6 7 8 9 | function abc(a,b,c){ var len = arguments.length; console.log(len); console.log(arguments[0]); console.log(arguments[1]); } abc(1,2,3); // 3 , 1 , 2 //长度为3,第一个值为1,第二个值为2... 看来是具有对应关系的 |
lg:就只有这2下子?一点都不好玩~ 呵,你还急了,当然不只这两下子啊,它有一个非常实用的功能,就是在函数中,无需明确指出参数名,arguments能直接访问它,你说屌不屌,耳听为虚,眼睛为使:
1 2 3 4 5 6 7 8 | function abc(){ var a = arguments; var num = arguments[0] + arguments[1] + arguments[2]; //这里可以用循环,为方便查看,拆开了写,你懂的 console.log(num); } abc(1,2,3); // 6 说明可以获取 //正常来说,函数没有参数,应该是要报错的,如果能成功运行,说明它具备这个神级 |
lg:果然了得啊,那它还有没有其他的吊炸天技能呢? 当然有啦!arguments对象中有一个非常有用的属性:callee。arguments.callee返回此arguments对象所在的当前函数引用。在使用函数递归调用时推荐使用arguments.callee代替函数名本身。举个栗子:
1 2 3 4 5 6 7 8 9 | function abc(a){ if (a==1){ return 1; } return a + arguments.callee(--a); } var mm = abc(10); console.log(mm); // 55<br><br>//arguments.callee(--a) 执行了递归调用,这样就完成了1~9的累加 |
看到这里,上面说的例子应该就不难写了吧,来跟着我左手右手一个慢动作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | function sumFn(){ var arg = arguments; var sum = 0; if (arg == '' || arg == ' ' || arg == null ){ sum = 0; } else { for ( var i=0;i<arg.length;i++){ if (isNaN(arg[i]) || arg[i] == '' || arg[i] == ' ' ){ sum = sum; } else { sum +=arg[i]; } } } return sum; } var num1 = sumFn(2) + sumFn(3); console.log(num1); //5 var num2 = sumFn(2,3,4); console.log(num2); //9 var num3 = sumFn(); console.log(num3); //0 var num4 = sumFn(1, 'e' ,6); console.log(num4); //7 |
到这里,不知道你对这个例子理解了没有, lg: 这么好的东西,兼容性怎么样呢? 哈哈,这么吊炸天的东西,兼容性还特别的好,你说气不气人,经测试,支持所有浏览器!
好了,它是对象,它也有对象,但是我还没有对象,呜呜呜~~~,我要去找对象去了!
行文仓促!有理解的不正确的或者是遗漏的东西,万望批评指正!不胜感激!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义