最近在学习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种写法的更多相关文章

  1. swap函数的四种写法

    swap 函数的四种写法 (1)经典型 --- 嫁衣法 void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } ( ...

  2. javascript立即调用的函数表达式N种写法(第二篇)

    原文:javascript立即调用的函数表达式N种写法(第二篇) 上一篇博客我谈到将函数声明转换为函数表达式最常见的一种写法是:通过括号()将匿名函数声明转换为函数表达式即(function(){}) ...

  3. swap()函数的几种写法及优劣

    试用几种方法实现swap函数,比较效率高低. 首先说结果,最快的是赋值交换. 原因分析 gcc开启O2优化后,三个函数的汇编代码一样.是的,除了第一行的文件名,一模一样. 附代码 void swap1 ...

  4. C++ 常用编程--Swap函数有几种写法?

    C++ 常用编程--Swap函数有几种写法? 在说C++模板的方法前,我们先想想C语言里面是怎么做交换的. 举个例子,要将两个int数值交换,是不是想到下面的代码: void swap(int& ...

  5. javascript函数的几种写法集合

    1.常规写法 function fnName(){ console.log("常规写法"); } 2.匿名函数,函数保存到变量里 var myfn = function(){ co ...

  6. Sql函数的三种写法

    以前复制的创建sql函数比较乱,现在将我自己项目中的三种sql函数做下对比,一目了然: (1)表值函数——方法一:直接创建临时表,并返回临时表.优点:函数体中间可以直接申明临时变量,并做各种逻辑处理, ...

  7. Javascript函数的几种写法

    最近在看某个插件的源码时,总是看到各种不同风格的js函数的写法.(怪我只是初级水平,看的一头雾水) 于是想找点资料,总结总结,心里不清不楚的总是很别扭! 1.常规写法 // 函数写法 function ...

  8. js中匿名函数的N种写法

    匿名函数没有实际名字,也没有指针,怎么执行? 关于匿名函数写法,很发散~ +号是让函数声明转换为函数表达式.汇总一下 最常见的用法: 代码如下: (function() {  alert('water ...

  9. 关于transition回调函数的几种写法

    平时工作中经常遇到需要transition动画结束后触发某个功能的问题,但是在映像中好像只见过animate的回调函数, 而transition的很多属性无法在animate中使用,经过一些总结归纳, ...

随机推荐

  1. yum网络源配置

    [root@xuegod60 ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak[root@x ...

  2. POJ2503(hash)

    Babelfish Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 41263   Accepted: 17561 Descr ...

  3. Iterator——迭代接口

    迭代对于JAVA的来说绝对不陌生.我们常常使用JDK提供的迭代接口进行Java集合的迭代. Iterator iterator = list.iterator(); while(iterator.ha ...

  4. java文件读写操作类

    借鉴了项目以前的文件写入功能,实现了对文件读写操作的封装 仅仅需要在读写方法传入路径即可(可以是绝对或相对路径) 以后使用时,可以在此基础上改进,比如: 写操作: 1,对java GUI中文本框中的内 ...

  5. Maven入门,Maven项目的创建,nexus 2.x搭建私服以及Maven多模块项目创建

    maven的了解做一个总结,以便日后查阅, 若有不足之处,还望指出,学无止境 当然也能起到入门效果. 一,搭建maven私服 1.工具 a. Nexus 2.5.1-01 b. Maven 3.3.9 ...

  6. 什么是DOCTYPE?

    一.DOCTYPE是什么? DOCTYPE是文档类型的速记(文档.网页中指定页面的XHTML或HTML版本类型).使符合标准的页面,一个关键组成部分是DOCTYPE声明.只有确定了正确的XHTML D ...

  7. RAID分类

    1. RAID在数据库存储上的应用   随着单块磁盘在数据安全.性能.容量上呈现出的局限,磁盘阵列(Redundant Arrays of Inexpensive/Independent Disks, ...

  8. phpcms代码读取文章的内容 实用可行的方法

    在使用phpcms做网站的时候经常遇到读取网站的内容作为推荐,而不是描述.这里使用可行的方法交你如何读取内容推荐.方法有两个,第一种执行的效率低,第二个效率高些. 1. {pc:get sql=&qu ...

  9. MONO 如何打包 .NET程序独立运行(winform篇)

    .NET程序独立运行是指运行.NET的电脑上,不需要安装.NET框架. .NET程序集“独立运行”并非真正的独立,它是运行在mono运行时基础之上的.由于这个运行时可以独立存在,所以,我们不需要在目标 ...

  10. java学习笔记——Java多客户端与服务器通信

    先说一下大概的思路: 应用多线程来实现服务器与多客户端之间的通信 1.服务器端创建ServerSocket,循环调用accept()等待客户端连接: 2.客户端创建一个Socket并请求与服务器端连接 ...