简单的add函数的N种写法
最近在学习es6,看到for-of这里,就想自己写着练习一下,于是就准备写一个小函数add来求和。函数很简单,如add(1,2,3)这样。于是我开始着手
一开始我是这么写的
function add(){
var result=0;
for (var i = 0; i < arguments.length; i++) {
result+=arguments[i]
}
return result
}
啪啪啪马上就写好了,最基本的方法,不过好像太简单了,着手升级一下。
用数组的方法写一下
function add(){
var result=0;
arguments.forEach(function(item){
result+=item
})
return result
}
提示报错:Uncaught TypeError: arguments.forEach is not a function
不可能,我明明都能打印出他的length出来
我肯定是遇到了一个假数组
确实,arguments看起来是个数组,但是并不是一个真正的数组。
打开chrome控制台,可以发现他跟真正的数组的区别;

对比两者的原型可以发现,arguments的原型指向的是object,而数组指向的是array
这让我想起一个笑话:
刚刚从大学本科毕业的小明决定买房,虽然他只有3000的月薪,但是他花了一年就做到了。一年后他那着存的3万元和他父亲给他的297万,终于买了房和车。
没办法人家是亲生的,[ ]虽然自己没有forEach方法,但是他父亲Array有啊,需要的时候直接就拿过来了。但是arguments指向的是object,他父亲也没钱给他买房,那怎么办,只好到处借了。
先像七大姑借了forEach过来
function add(){
var result=0;
Array.prototype.forEach.call(arguments,(i)=>{
result+=i;
})
return result
}
好像还不够,又像八大姨借了reduce过来
function add(){
return Array.prototype.reduce.call(arguments,(pre,next)=>{
return pre+next
})
}
虽然筹够钱买房了,但是思来思去,总是借钱了不好,于是发奋涂墙,期望不用借钱也能自己买房
1.Array.from:将一个 ArrayLike 对象或者 Iterable 对象转换成一个 Array。
function add(){
var arr=Array.from(arguments);
return arr.reduce(arguments,(pre,next)=>{
return pre+next
})
}
2.展开运算符
function(...arg){
return arg.reduce((pre,next)=>{
return pre+next
})
}
3.当然最简单的for of
function(){
var result=0;
for(const i of arguments){
result+=i
};
return result
}
简单的add函数的N种写法的更多相关文章
- swap函数的四种写法
swap 函数的四种写法 (1)经典型 --- 嫁衣法 void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } ( ...
- javascript立即调用的函数表达式N种写法(第二篇)
原文:javascript立即调用的函数表达式N种写法(第二篇) 上一篇博客我谈到将函数声明转换为函数表达式最常见的一种写法是:通过括号()将匿名函数声明转换为函数表达式即(function(){}) ...
- swap()函数的几种写法及优劣
试用几种方法实现swap函数,比较效率高低. 首先说结果,最快的是赋值交换. 原因分析 gcc开启O2优化后,三个函数的汇编代码一样.是的,除了第一行的文件名,一模一样. 附代码 void swap1 ...
- C++ 常用编程--Swap函数有几种写法?
C++ 常用编程--Swap函数有几种写法? 在说C++模板的方法前,我们先想想C语言里面是怎么做交换的. 举个例子,要将两个int数值交换,是不是想到下面的代码: void swap(int& ...
- javascript函数的几种写法集合
1.常规写法 function fnName(){ console.log("常规写法"); } 2.匿名函数,函数保存到变量里 var myfn = function(){ co ...
- Sql函数的三种写法
以前复制的创建sql函数比较乱,现在将我自己项目中的三种sql函数做下对比,一目了然: (1)表值函数——方法一:直接创建临时表,并返回临时表.优点:函数体中间可以直接申明临时变量,并做各种逻辑处理, ...
- Javascript函数的几种写法
最近在看某个插件的源码时,总是看到各种不同风格的js函数的写法.(怪我只是初级水平,看的一头雾水) 于是想找点资料,总结总结,心里不清不楚的总是很别扭! 1.常规写法 // 函数写法 function ...
- js中匿名函数的N种写法
匿名函数没有实际名字,也没有指针,怎么执行? 关于匿名函数写法,很发散~ +号是让函数声明转换为函数表达式.汇总一下 最常见的用法: 代码如下: (function() { alert('water ...
- 关于transition回调函数的几种写法
平时工作中经常遇到需要transition动画结束后触发某个功能的问题,但是在映像中好像只见过animate的回调函数, 而transition的很多属性无法在animate中使用,经过一些总结归纳, ...
随机推荐
- DDD创始人Eric Vans:要实现DDD原始意图,必须CQRS+Event Sourcing架构
http://www.infoq.com/interviews/Technology-Influences-DDD# 要实现DDD(domain drive design 领域驱动设计)原始意图,必 ...
- Java程序性能优化读书笔记(一):Java性能调优概述
程序性能的主要表现点: 执行速度:程序的反映是否迅速,响应时间是否足够短 内存分配:内存分配是否合理,是否过多地消耗内存或者存在内存泄漏 启动时间:程序从运行到可以正常处理业务需要花费多少时间 负载承 ...
- 关于Task的一点思考和建议
前言 本打算继续写SQL Server系列,接下来应该是死锁了,但是在.NET Core项目中到处都是异步,最近在写一个爬虫用到异步,之前不是很频繁用到异步,当用到时就有点缩手缩尾,怕留下坑,还是小心 ...
- API网关Ocelot 使用Polly 处理部分失败问题
在实现API Gateway过程中,另外一个需要考虑的问题就是部分失败.这个问题发生在分布式系统中当一个服务调用另外一个服务超时或者不可用的情况.API Gateway不应该被阻断并处于无限期等待下游 ...
- python - bilibili(二)出错的解决办法
在获取房间号之前我们先解决上篇文章遗留的bug,即输入的房间号不是数字和对应的房间号不存在而产生的问题. 输入的房间号不是数字: 在python中,你所输入的必定是字符串,虽然你输入的是数字,但是类型 ...
- JTextArea与TextArea自动换行和滚动条的区别对比
最近在用Java写一个仿记事本的程序,但是发现用JTextArea写的效果有点差,但是用TextArea自动换行并不那么方便,经过对比和实践,我也发现自己对这两个标签认识存在不足,下面就来讨论一下他们 ...
- JavaScript 毒瘤和糟粕(需要注意的地方)
简介 我想这是在我总结JavaScript系列中最为需要注意的,最为重要的内容.你必须要去了解这些问题特性,才能准备好应对措施,这真的很重要. 毒瘤 全局变量 全局变量的存在的确是带来了方便,但是我觉 ...
- Handlebars模板引擎之上手
handlebars Handlebars,一个JavaScript模板引擎,是基于Mustache的扩展.模板引擎的都存在一个上下文环境,这是它的作用区间. 需求:基本使用 需要的库 <scr ...
- 【转】Netty系列之Netty并发编程分析
http://www.infoq.com/cn/articles/netty-concurrent-programming-analysis
- ThinkPHP项目总结
1.当你 require ThinkPHP之后,会自动在App目录下生成 common, Home, Runtime 三个文件夹. 2.输入网址 http://localhost/blog/app/i ...