zoukankan      html  css  js  c++  java
  • arguments对象的实例使用

    新年第一记,从这里开始,先来个简单的!去年的知识梳理留下了很多尾巴,原因有很多(知识储量不足,懒了,项目多...) lg:都是借口~   好吧,我承认,这都是借口,今年一定把尾巴清干净!

    下面要写的是知识梳理的第一个案例:

    1. 写一个求和的方法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){
        console.log(arguments.callee); //直接输出当前函数
        return 1;
      }
      return a + arguments.callee(--a);
    }
             
    var mm = abc(10);
    console.log(mm); // 55<br><br>//arguments.callee(--a) 执行了递归调用,这样就完成了1~9的累加

    看到这里,上面说的例子应该就不难写了吧,来跟着我左手右手一个慢动作:

    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: 这么好的东西,兼容性怎么样呢?  哈哈,这么吊炸天的东西,兼容性还特别的好,你说气不气人,经测试,支持所有浏览器!

    好了,它是对象,它也有对象,但是我还没有对象,呜呜呜~~~,我要去找对象去了!

    行文仓促!有理解的不正确的或者是遗漏的东西,万望批评指正!不胜感激!

    出处:http://www.cnblogs.com/liugang-vip/p/5201146.html

  • 相关阅读:
    vue父组件促发子组件中的方法
    油猴脚本:油猴脚本自动点击 | 自动检测元素并点击、休眠、顺序执行、单页面也适用
    油猴脚本:使用layer.js mobx lodash jquery
    vue项目统计src目录下代码行数
    常用mobx响应新值变化函数autorun和observe
    uni app使用mobx | uni app状态管理mobx
    File and Code Templates | webstorm代码文件模板 vue typescript
    javascript立即执行函数简单介绍
    VSCode 安装GitLens插件不生效问题
    常用的浅拷贝实现方法
  • 原文地址:https://www.cnblogs.com/mq0036/p/5202204.html
Copyright © 2011-2022 走看看