简单的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   
        }
posted @ 2017-03-20 00:56  Runlin  阅读(4948)  评论(0编辑  收藏  举报